diff --git a/src/lib/components/Calendar/ScheduleTable.svelte b/src/lib/components/Calendar/ScheduleTable.svelte index 5817809..57e35ce 100644 --- a/src/lib/components/Calendar/ScheduleTable.svelte +++ b/src/lib/components/Calendar/ScheduleTable.svelte @@ -1,7 +1,7 @@ @@ -78,9 +101,9 @@ on:click={() => handleEditorOpen(i)} on:keyup={() => handleEditorOpen(i)} > - {#if !row.availRange} + {#if row.availRange === AvailabilityStatus.UNSPECIFIED}

Unspecified (edit)

- {:else if row.availRange === 'Busy'} + {:else if row.availRange === AvailabilityStatus.BUSY}

Busy (edit)

{:else}

{row.availRange}

@@ -97,7 +120,7 @@

(edit)

{/if} - {#if !row.availRange} + {#if row.availRange === AvailabilityStatus.UNSPECIFIED}
{ markRowAsUnavailable({ diff --git a/src/lib/logics/Calendar/ScheduleTable/logic.ts b/src/lib/logics/Calendar/ScheduleTable/logic.ts index 2f5d9db..7777d5e 100644 --- a/src/lib/logics/Calendar/ScheduleTable/logic.ts +++ b/src/lib/logics/Calendar/ScheduleTable/logic.ts @@ -21,7 +21,6 @@ export const getRowColor = ({ isAvailable: boolean; isRowExpanded: boolean; }) => { - console.log({ i, numRows, isAvailable, isRowExpanded }); if (i >= numRows) return i % 2 ? LIGHT_GRAY : WHITE; if (isAvailable && !isRowExpanded) { return LIGHT_BLUE; @@ -54,7 +53,7 @@ export const updateRowColors = ({ }); }; -const markRowUnavailableLocally = ({ +export const markRowUnavailableLocally = ({ i, displayedRows, // dbRow, @@ -68,6 +67,7 @@ const markRowUnavailableLocally = ({ displayedRows[i].notes = ''; displayedRows[i].emoticons = new Set(); displayedRows[i].availRange = status; + return displayedRows; // dbRow.notes = ''; // dbRow.emoticons = new Set(); // dbRow.availRange = status; @@ -193,7 +193,7 @@ const updateDisplayedRow = async ({ // updateRowColors(); }; -const requestToMarkOneRow = async ({ +export const requestToMarkOneRow = async ({ i, status, // dbRows, @@ -224,6 +224,9 @@ const requestToMarkOneRow = async ({ } : {}) }); + console.log(response) + console.log(await response.json()) + return; // if (response.status == 200) { @@ -265,20 +268,20 @@ export const markRowAsUnavailable = async ({ }) => { markRowUnavailableLocally({ i, displayedRows, status }); - try { - await requestToMarkOneRow({ - i, - status, - // dbRows, - displayedRows, - availableDetails: null - }); - closeEditor({ i, openedRows }); - } catch (err) { - console.error(err); - console.error('Something went wrong with marking row as unavailable'); - throw new Error(); - } + // try { + // await requestToMarkOneRow({ + // i, + // status, + // // dbRows, + // displayedRows, + // availableDetails: null + // }); + // closeEditor({ i, openedRows }); + // } catch (err) { + // console.error(err); + // console.error('Something went wrong with marking row as unavailable'); + // throw new Error(); + // } }; export const markRowAsAvailable = async ({ diff --git a/src/lib/server/db.ts b/src/lib/server/db.ts index e46ebc2..3ecfeff 100644 --- a/src/lib/server/db.ts +++ b/src/lib/server/db.ts @@ -5,7 +5,7 @@ import type { User } from '@prisma/client'; import { dateTo12Hour, toLocalTimezone } from '../date'; import { dateNotes } from './sanitize'; import prisma from '$lib/prisma'; -import { findHouseConnection } from './shared'; +import { findHouseConnection, getHousehold, getUserAttrsInHousehold } from './shared'; import { sendMsg } from './twilio'; import { DAYS } from '$lib/constants'; import { destructRange } from '$lib/parse'; @@ -340,44 +340,6 @@ async function saveSchedule( return res; } -async function createHouseholdInvite( - req: { - targetPhone: string; - }, - user: User -) { - const { targetPhone } = req; - const { id: fromUserId } = user; - const { householdId } = user; - if (!householdId) { - throw error(401, { - message: 'You need to create / join a household before inviting others to join it.' - }); - } - - const existingInvites = await prisma.joinHouseholdRequest.findMany({ - where: { - targetPhone, - householdId - } - }); - if (existingInvites.length) - throw error(400, { - message: 'The user associated with this number has already been invited to this household.' - }); - const now = new Date(); - const expires = now; - expires.setDate(now.getDate() + 7); // expire 1 week from now - await prisma.joinHouseholdRequest.create({ - data: { - expires, - targetPhone, - householdId, - fromUserId - } - }); -} - async function saveUser( req: { firstName: string; @@ -481,92 +443,6 @@ async function saveUser( return updatedUser.id; } -async function createHousehold( - user: User, - data?: { name: string; publicNotes: string; updatedAt: Date } -) { - if (user.householdId) - throw error(400, { - message: "Can't create household for someone who's already in a household" - }); - // create household - const household = await prisma.household.create({ - data: data ?? { - name: '', - publicNotes: '', - updatedAt: new Date() - } - }); - console.log('CREATED HOUSEHOLD', household); - // then associate user to it - await prisma.user.update({ - where: { - id: user.id - }, - data: { - householdId: household.id - } - }); - - return household.id; -} - -async function saveHousehold( - req: { - name: string; - publicNotes: string; - }, - user: User -) { - const { name, publicNotes } = req; - const { householdId } = user; - const data = { - name, - publicNotes, - updatedAt: new Date() - }; - - if (!householdId) { - await createHousehold(user, data); - } else { - await prisma.household.update({ - where: { - id: householdId - }, - data - }); - } -} - -async function saveKid( - req: { - firstName: string; - pronouns: Pronoun; - lastName: string; - dateOfBirth: Date; - }, - user: User -) { - const { firstName, pronouns, lastName, dateOfBirth } = req; - const { householdId } = user; - // ensure the household exists before adding kid to it - if (!householdId) { - throw error(401, { - message: 'Create a household before trying to add a child to it' - }); - } - const kid = await prisma.householdChild.create({ - data: { - householdId, - firstName, - pronouns, - lastName, - dateOfBirth - } - }); - return kid.id; -} - async function deleteKid(req: { id: number }, user: User) { const { id } = req; const kid = await prisma.householdChild.findUnique({ @@ -867,7 +743,43 @@ async function deleteUser(user: User) { }); } +async function acceptFriendReqRoute( + req: { + friendReqId: number; + }, + user: User +) { + // get each household's id + const otherHouseholdId = await acceptFriendReq(req, user); + + // get users' phones, time zones in both households + const userAttrs = ['phone', 'timeZone']; + const [adults1, adults2] = await Promise.all([ + await getUserAttrsInHousehold(otherHouseholdId, userAttrs), + await getUserAttrsInHousehold(user.householdId, userAttrs) + ]); + + // get names for both households + const attrs = ['name', 'id']; + const household1 = await getHousehold(otherHouseholdId, attrs); + if (!household1) { + throw error(404, { + message: `Can't find household ${otherHouseholdId}` + }); + } + const household2 = await getHousehold(user.householdId, attrs); + if (!household2) { + throw error(404, { + message: `Can't find household ${user.householdId}` + }); + } + + await sendFaqLinks(adults1, adults2, household1, household2, user); + await sendSched(adults1, adults2, household1, household2, user); +} + export { + acceptFriendReqRoute, sendSched, sendFaqLinks, deleteHouseholdInvite, @@ -877,11 +789,7 @@ export { acceptFriendReq, deleteFriendReq, saveSchedule, - createHouseholdInvite, saveUser, - createHousehold, - saveHousehold, - saveKid, deleteKid, deleteHousehold, removeHouseholdAdult, diff --git a/src/lib/server/dbRoutes/createHousehold.ts b/src/lib/server/dbRoutes/createHousehold.ts new file mode 100644 index 0000000..48f1d2f --- /dev/null +++ b/src/lib/server/dbRoutes/createHousehold.ts @@ -0,0 +1,24 @@ +import type { User } from "@prisma/client"; +import Household from "../repository/Household"; + +export default async function createHousehold( + req: { + name: string; + publicNotes: string; + }, + user: User +) { + const { name, publicNotes } = req; + const { householdId } = user; + const data = { + name, + publicNotes, + updatedAt: new Date() + }; + + if (!householdId) { + await Household.create(user, data); + } else { + await new Household(householdId).update(data) + } +} \ No newline at end of file diff --git a/src/lib/server/dbRoutes/createHouseholdInvite.ts b/src/lib/server/dbRoutes/createHouseholdInvite.ts new file mode 100644 index 0000000..46628f7 --- /dev/null +++ b/src/lib/server/dbRoutes/createHouseholdInvite.ts @@ -0,0 +1,41 @@ +import prisma from "$lib/prisma"; +import type { User } from "@prisma/client"; +import { error } from "@sveltejs/kit"; + +export default async function createHouseholdInvite( + req: { + targetPhone: string; + }, + user: User +) { + const { targetPhone } = req; + const { id: fromUserId } = user; + const { householdId } = user; + if (!householdId) { + throw error(401, { + message: 'You need to create / join a household before inviting others to join it.' + }); + } + + const existingInvites = await prisma.joinHouseholdRequest.findMany({ + where: { + targetPhone, + householdId + } + }); + if (existingInvites.length) + throw error(400, { + message: 'The user associated with this number has already been invited to this household.' + }); + const now = new Date(); + const expires = now; + expires.setDate(now.getDate() + 7); // expire 1 week from now + await prisma.joinHouseholdRequest.create({ + data: { + expires, + targetPhone, + householdId, + fromUserId + } + }); +} \ No newline at end of file diff --git a/src/lib/server/dbRoutes/createKid.ts b/src/lib/server/dbRoutes/createKid.ts new file mode 100644 index 0000000..53dc21b --- /dev/null +++ b/src/lib/server/dbRoutes/createKid.ts @@ -0,0 +1,32 @@ +import prisma from "$lib/prisma"; +import type { Pronoun, User } from "@prisma/client"; +import { error } from "@sveltejs/kit"; + +export default async function saveKid( + req: { + firstName: string; + pronouns: Pronoun; + lastName: string; + dateOfBirth: Date; + }, + user: User +) { + const { firstName, pronouns, lastName, dateOfBirth } = req; + const { householdId } = user; + // ensure the household exists before adding kid to it + if (!householdId) { + throw error(401, { + message: 'Create a household before trying to add a child to it' + }); + } + const kid = await prisma.householdChild.create({ + data: { + householdId, + firstName, + pronouns, + lastName, + dateOfBirth + } + }); + return kid.id; +} \ No newline at end of file diff --git a/src/lib/server/dbRoutes/index.ts b/src/lib/server/dbRoutes/index.ts new file mode 100644 index 0000000..24cd888 --- /dev/null +++ b/src/lib/server/dbRoutes/index.ts @@ -0,0 +1,7 @@ +import createHousehold from './createHousehold'; +import createKid from './createKid'; + +export { + createHousehold, + createKid +} \ No newline at end of file diff --git a/src/lib/server/dbRoutes/saveSchedule.ts b/src/lib/server/dbRoutes/saveSchedule.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/server/repository/Household.ts b/src/lib/server/repository/Household.ts new file mode 100644 index 0000000..60aa939 --- /dev/null +++ b/src/lib/server/repository/Household.ts @@ -0,0 +1,48 @@ +import prisma from '$lib/prisma'; +import type * as Prisma from '@prisma/client'; +import { error } from '@sveltejs/kit'; + +export default class Household { + id: number; + constructor(id: number) { + this.id = id; + } + static async create( + user: Prisma.User, + data?: { name: string; publicNotes: string; updatedAt: Date } + ) { + if (user.householdId) + throw error(400, { + message: "Can't create household for someone who's already in a household" + }); + // create household + const household = await prisma.household.create({ + data: data ?? { + name: '', + publicNotes: '', + updatedAt: new Date() + } + }); + console.log('CREATED HOUSEHOLD', household); + // then associate user to it + await prisma.user.update({ + where: { + id: user.id + }, + data: { + householdId: household.id + } + }); + + return household.id; + } + + async update(data: Prisma.HouseholdUpdateInput) { + await prisma.household.update({ + where: { + id: this.id + }, + data + }); + } +} diff --git a/src/routes/calendar/+page.svelte b/src/routes/calendar/+page.svelte index f319de8..ff860f8 100644 --- a/src/routes/calendar/+page.svelte +++ b/src/routes/calendar/+page.svelte @@ -30,7 +30,7 @@
- +