27 lines
918 B
TypeScript
27 lines
918 B
TypeScript
import type { Prisma, PrismaClient } from '@prisma/client'
|
|
import { addMonths, endOfDay, startOfDay, startOfYear, endOfYear, subDays } from 'date-fns'
|
|
|
|
type SettingsClient = PrismaClient | Prisma.TransactionClient
|
|
|
|
export async function getUserSetting(prisma: SettingsClient, userId: string) {
|
|
return prisma.userSetting.upsert({
|
|
where: { userId },
|
|
update: {},
|
|
create: { userId }
|
|
})
|
|
}
|
|
|
|
export function monthRange(month: string, monthStartDay: number) {
|
|
const [year, monthNumber] = month.split('-').map(Number)
|
|
const normalizedDay = Math.min(Math.max(monthStartDay || 1, 1), 28)
|
|
const start = startOfDay(new Date(year, monthNumber - 1, normalizedDay))
|
|
const end = endOfDay(subDays(addMonths(start, 1), 1))
|
|
return { start, end }
|
|
}
|
|
|
|
export function yearRange(year: string) {
|
|
const start = startOfYear(new Date(`${year}-01-01T00:00:00`))
|
|
const end = endOfYear(start)
|
|
return { start, end }
|
|
}
|