mirror of
https://github.com/spliit-app/spliit.git
synced 2026-02-25 08:56:13 +01:00
Use tRPC in other group pages (#249)
* Use tRPC in group edition + group layout * Use tRPC in group modals * Use tRPC in group stats * Use tRPC in group activity
This commit is contained in:
committed by
GitHub
parent
66e15e419e
commit
210c12b7ef
@@ -1,9 +1,11 @@
|
||||
import { categoriesRouter } from '@/trpc/routers/categories'
|
||||
import { groupsRouter } from '@/trpc/routers/groups'
|
||||
import { inferRouterOutputs } from '@trpc/server'
|
||||
import { createTRPCRouter } from '../init'
|
||||
|
||||
export const appRouter = createTRPCRouter({
|
||||
groups: groupsRouter,
|
||||
categories: categoriesRouter,
|
||||
})
|
||||
|
||||
export type AppRouter = typeof appRouter
|
||||
|
||||
6
src/trpc/routers/categories/index.ts
Normal file
6
src/trpc/routers/categories/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { createTRPCRouter } from '@/trpc/init'
|
||||
import { listCategoriesProcedure } from '@/trpc/routers/categories/list.procedure'
|
||||
|
||||
export const categoriesRouter = createTRPCRouter({
|
||||
list: listCategoriesProcedure,
|
||||
})
|
||||
6
src/trpc/routers/categories/list.procedure.ts
Normal file
6
src/trpc/routers/categories/list.procedure.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { getCategories } from '@/lib/api'
|
||||
import { baseProcedure } from '@/trpc/init'
|
||||
|
||||
export const listCategoriesProcedure = baseProcedure.query(async () => {
|
||||
return { categories: await getCategories() }
|
||||
})
|
||||
6
src/trpc/routers/groups/activities/index.ts
Normal file
6
src/trpc/routers/groups/activities/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { createTRPCRouter } from '@/trpc/init'
|
||||
import { listGroupActivitiesProcedure } from '@/trpc/routers/groups/activities/list.procedure'
|
||||
|
||||
export const activitiesRouter = createTRPCRouter({
|
||||
list: listGroupActivitiesProcedure,
|
||||
})
|
||||
23
src/trpc/routers/groups/activities/list.procedure.ts
Normal file
23
src/trpc/routers/groups/activities/list.procedure.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { getActivities } from '@/lib/api'
|
||||
import { baseProcedure } from '@/trpc/init'
|
||||
import { z } from 'zod'
|
||||
|
||||
export const listGroupActivitiesProcedure = baseProcedure
|
||||
.input(
|
||||
z.object({
|
||||
groupId: z.string(),
|
||||
cursor: z.number().optional().default(0),
|
||||
limit: z.number().optional().default(5),
|
||||
}),
|
||||
)
|
||||
.query(async ({ input: { groupId, cursor, limit } }) => {
|
||||
const activities = await getActivities(groupId, {
|
||||
offset: cursor,
|
||||
length: limit + 1,
|
||||
})
|
||||
return {
|
||||
activities: activities.slice(0, limit),
|
||||
hasMore: !!activities[limit],
|
||||
nextCursor: cursor + limit,
|
||||
}
|
||||
})
|
||||
@@ -1,14 +1,10 @@
|
||||
import { getGroup } from '@/lib/api'
|
||||
import { getGroup, getGroupExpensesParticipants } from '@/lib/api'
|
||||
import { baseProcedure } from '@/trpc/init'
|
||||
import { TRPCError } from '@trpc/server'
|
||||
import { z } from 'zod'
|
||||
|
||||
export const getGroupInformationProcedure = baseProcedure
|
||||
.input(
|
||||
z.object({
|
||||
groupId: z.string().min(1),
|
||||
}),
|
||||
)
|
||||
export const getGroupProcedure = baseProcedure
|
||||
.input(z.object({ groupId: z.string().min(1) }))
|
||||
.query(async ({ input: { groupId } }) => {
|
||||
const group = await getGroup(groupId)
|
||||
if (!group) {
|
||||
@@ -17,5 +13,7 @@ export const getGroupInformationProcedure = baseProcedure
|
||||
message: 'Group not found.',
|
||||
})
|
||||
}
|
||||
return { information: group.information ?? '' }
|
||||
|
||||
const participantsWithExpenses = await getGroupExpensesParticipants(groupId)
|
||||
return { group, participantsWithExpenses }
|
||||
})
|
||||
@@ -1,10 +1,17 @@
|
||||
import { createTRPCRouter } from '@/trpc/init'
|
||||
import { activitiesRouter } from '@/trpc/routers/groups/activities'
|
||||
import { groupBalancesRouter } from '@/trpc/routers/groups/balances'
|
||||
import { groupExpensesRouter } from '@/trpc/routers/groups/expenses'
|
||||
import { groupInformationRouter } from '@/trpc/routers/groups/information'
|
||||
import { getGroupProcedure } from '@/trpc/routers/groups/get.procedure'
|
||||
import { groupStatsRouter } from '@/trpc/routers/groups/stats'
|
||||
import { updateGroupProcedure } from '@/trpc/routers/groups/update.procedure'
|
||||
|
||||
export const groupsRouter = createTRPCRouter({
|
||||
expenses: groupExpensesRouter,
|
||||
balances: groupBalancesRouter,
|
||||
information: groupInformationRouter,
|
||||
stats: groupStatsRouter,
|
||||
activities: activitiesRouter,
|
||||
|
||||
get: getGroupProcedure,
|
||||
update: updateGroupProcedure,
|
||||
})
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createTRPCRouter } from '@/trpc/init'
|
||||
import { getGroupInformationProcedure } from '@/trpc/routers/groups/information/get.procedure'
|
||||
|
||||
export const groupInformationRouter = createTRPCRouter({
|
||||
get: getGroupInformationProcedure,
|
||||
})
|
||||
35
src/trpc/routers/groups/stats/get.procedure.ts
Normal file
35
src/trpc/routers/groups/stats/get.procedure.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { getGroupExpenses } from '@/lib/api'
|
||||
import {
|
||||
getTotalActiveUserPaidFor,
|
||||
getTotalActiveUserShare,
|
||||
getTotalGroupSpending,
|
||||
} from '@/lib/totals'
|
||||
import { baseProcedure } from '@/trpc/init'
|
||||
import { z } from 'zod'
|
||||
|
||||
export const getGroupStatsProcedure = baseProcedure
|
||||
.input(
|
||||
z.object({
|
||||
groupId: z.string().min(1),
|
||||
participantId: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ input: { groupId, participantId } }) => {
|
||||
const expenses = await getGroupExpenses(groupId)
|
||||
const totalGroupSpendings = getTotalGroupSpending(expenses)
|
||||
|
||||
const totalParticipantSpendings =
|
||||
participantId !== undefined
|
||||
? getTotalActiveUserPaidFor(participantId, expenses)
|
||||
: undefined
|
||||
const totalParticipantShare =
|
||||
participantId !== undefined
|
||||
? getTotalActiveUserShare(participantId, expenses)
|
||||
: undefined
|
||||
|
||||
return {
|
||||
totalGroupSpendings,
|
||||
totalParticipantSpendings,
|
||||
totalParticipantShare,
|
||||
}
|
||||
})
|
||||
6
src/trpc/routers/groups/stats/index.ts
Normal file
6
src/trpc/routers/groups/stats/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { createTRPCRouter } from '@/trpc/init'
|
||||
import { getGroupStatsProcedure } from '@/trpc/routers/groups/stats/get.procedure'
|
||||
|
||||
export const groupStatsRouter = createTRPCRouter({
|
||||
get: getGroupStatsProcedure,
|
||||
})
|
||||
16
src/trpc/routers/groups/update.procedure.ts
Normal file
16
src/trpc/routers/groups/update.procedure.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { updateGroup } from '@/lib/api'
|
||||
import { groupFormSchema } from '@/lib/schemas'
|
||||
import { baseProcedure } from '@/trpc/init'
|
||||
import { z } from 'zod'
|
||||
|
||||
export const updateGroupProcedure = baseProcedure
|
||||
.input(
|
||||
z.object({
|
||||
groupId: z.string().min(1),
|
||||
groupFormValues: groupFormSchema,
|
||||
participantId: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.mutation(async ({ input: { groupId, groupFormValues, participantId } }) => {
|
||||
await updateGroup(groupId, groupFormValues, participantId)
|
||||
})
|
||||
Reference in New Issue
Block a user