# Conflicts:
#	backend/src/repositories/birdRepository.ts
This commit is contained in:
Corey Blais
2026-05-20 17:15:00 -04:00
20 changed files with 1641 additions and 29 deletions
+37 -10
View File
@@ -28,6 +28,9 @@ const birdSelectFields = `
birds.gotcha_day::text,
birds.chart_color,
birds.photo_data_url,
birds.photo_object_key,
birds.photo_content_type,
birds.photo_updated_at,
birds.notify_on_dob,
birds.notify_on_gotcha_day,
birds.memorialized_at,
@@ -253,6 +256,7 @@ export const createBirdMilestoneReminderDelivery = async ({
};
export const createBird = async ({
birdId,
workspaceId,
name,
tagId,
@@ -265,9 +269,13 @@ export const createBird = async ({
gotchaDay,
chartColor,
photoDataUrl,
photoObjectKey = null,
photoContentType = null,
photoUpdatedAt = null,
notifyOnDob,
notifyOnGotchaDay,
}: {
birdId?: string;
workspaceId: number;
name: string;
tagId: string | null;
@@ -280,14 +288,18 @@ export const createBird = async ({
gotchaDay: string | null;
chartColor: string;
photoDataUrl: string | null;
photoObjectKey?: string | null;
photoContentType?: string | null;
photoUpdatedAt?: string | null;
notifyOnDob: boolean;
notifyOnGotchaDay: boolean;
}) => {
const result = await db.query<BirdRow>(
`INSERT INTO birds (workspace_id, name, tag_id, species, motivators, demotivators, favorite_snack, gender, date_of_birth, gotcha_day, chart_color, photo_data_url, notify_on_dob, notify_on_gotcha_day)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
RETURNING id, workspace_id, name, tag_id, species, motivators, demotivators, favorite_snack, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at, NULL::text AS latest_weight_grams, NULL::text AS latest_recorded_on`,
`INSERT INTO birds (id, workspace_id, name, tag_id, species, motivators, demotivators, favorite_snack, gender, date_of_birth, gotcha_day, chart_color, photo_data_url, photo_object_key, photo_content_type, photo_updated_at, notify_on_dob, notify_on_gotcha_day)
VALUES (COALESCE($1::uuid, gen_random_uuid()), $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18)
RETURNING id, workspace_id, name, tag_id, species, motivators, demotivators, favorite_snack, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, photo_object_key, photo_content_type, photo_updated_at, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at, NULL::text AS latest_weight_grams, NULL::text AS latest_recorded_on`,
[
birdId ?? null,
workspaceId,
name,
tagId,
@@ -300,6 +312,9 @@ export const createBird = async ({
gotchaDay,
chartColor,
photoDataUrl,
photoObjectKey,
photoContentType,
photoUpdatedAt,
notifyOnDob,
notifyOnGotchaDay,
],
@@ -322,6 +337,9 @@ export const updateBird = async ({
gotchaDay,
chartColor,
photoDataUrl,
photoObjectKey = null,
photoContentType = null,
photoUpdatedAt = null,
notifyOnDob,
notifyOnGotchaDay,
}: {
@@ -338,6 +356,9 @@ export const updateBird = async ({
gotchaDay: string | null;
chartColor: string;
photoDataUrl: string | null;
photoObjectKey?: string | null;
photoContentType?: string | null;
photoUpdatedAt?: string | null;
notifyOnDob: boolean;
notifyOnGotchaDay: boolean;
}) => {
@@ -354,12 +375,15 @@ export const updateBird = async ({
gotcha_day = $10,
chart_color = $11,
photo_data_url = $12,
notify_on_dob = $13,
notify_on_gotcha_day = $14
photo_object_key = $13,
photo_content_type = $14,
photo_updated_at = $15,
notify_on_dob = $16,
notify_on_gotcha_day = $17
WHERE id = $1
AND workspace_id = $15
AND workspace_id = $18
AND memorialized_at IS NULL
RETURNING id, workspace_id, name, tag_id, species, motivators, demotivators, favorite_snack, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
RETURNING id, workspace_id, name, tag_id, species, motivators, demotivators, favorite_snack, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, photo_object_key, photo_content_type, photo_updated_at, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
(
SELECT weight_grams::text
FROM weight_records
@@ -387,6 +411,9 @@ export const updateBird = async ({
gotchaDay,
chartColor,
photoDataUrl,
photoObjectKey,
photoContentType,
photoUpdatedAt,
notifyOnDob,
notifyOnGotchaDay,
workspaceId,
@@ -418,7 +445,7 @@ export const memorializeBird = async ({
WHERE id = $1
AND workspace_id = $2
AND memorialized_at IS NULL
RETURNING id, workspace_id, name, tag_id, species, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
RETURNING id, workspace_id, name, tag_id, species, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, photo_object_key, photo_content_type, photo_updated_at, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
(
SELECT weight_grams::text
FROM weight_records
@@ -454,7 +481,7 @@ export const updateMemorialReminderPreference = async ({
WHERE id = $1
AND workspace_id = $2
AND memorialized_at IS NOT NULL
RETURNING id, workspace_id, name, tag_id, species, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
RETURNING id, workspace_id, name, tag_id, species, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, photo_object_key, photo_content_type, photo_updated_at, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
(
SELECT weight_grams::text
FROM weight_records
@@ -494,7 +521,7 @@ export const transferBirdToWorkspace = async (birdId: string, sourceWorkspaceId:
WHERE id = $1
AND workspace_id = $2
AND memorialized_at IS NULL
RETURNING id, workspace_id, name, tag_id, species, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
RETURNING id, workspace_id, name, tag_id, species, gender, date_of_birth::text, gotcha_day::text, chart_color, photo_data_url, photo_object_key, photo_content_type, photo_updated_at, notify_on_dob, notify_on_gotcha_day, memorialized_at, memorialized_on::text, memorial_note, notify_on_memorial_day, created_at,
(
SELECT weight_grams::text
FROM weight_records