--
-- One like per-building, per-user
--

-- Drop duplicate likes
DELETE FROM building_user_likes
  WHERE building_like_id NOT IN (
    SELECT min(building_like_id)
    FROM building_user_likes
    GROUP BY (building_id, user_id)
  );

-- Reset counts
UPDATE buildings
  SET likes_total = (
    SELECT count(*)
    FROM building_user_likes
    WHERE buildings.building_id = building_user_likes.building_id
  )
  WHERE buildings.building_id in (
      SELECT DISTINCT building_id
      FROM building_user_likes
  );

-- Add constraint
ALTER TABLE building_user_likes ADD CONSTRAINT building_like_once UNIQUE (building_id, user_id);