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 @@
{
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 @@
- |