diff --git a/src/app/(main)/settings/preferences/DateRangeSetting.tsx b/src/app/(main)/settings/preferences/DateRangeSetting.tsx index e47ce0b69..2b81985f5 100644 --- a/src/app/(main)/settings/preferences/DateRangeSetting.tsx +++ b/src/app/(main)/settings/preferences/DateRangeSetting.tsx @@ -1,24 +1,21 @@ -import { useState } from 'react'; import { DateFilter } from '@/components/input/DateFilter'; import { Button, Row } from '@umami/react-zen'; -import { useMessages } from '@/components/hooks'; -import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; -import { setItem, getItem } from '@/lib/storage'; +import { useDateRange, useMessages } from '@/components/hooks'; +import { DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; export function DateRangeSetting() { const { formatMessage, labels } = useMessages(); - const [date, setDate] = useState(getItem(DATE_RANGE_CONFIG) || DEFAULT_DATE_RANGE_VALUE); + const { dateRange, saveDateRange } = useDateRange(); + const { value } = dateRange; const handleChange = (value: string) => { - setItem(DATE_RANGE_CONFIG, value); - setDate(value); + saveDateRange(value); }; - - const handleReset = () => setItem(DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE_VALUE); + const handleReset = () => saveDateRange(DEFAULT_DATE_RANGE_VALUE); return ( - + ); diff --git a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx index 67412d5cc..b72f00a01 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx @@ -15,7 +15,7 @@ export function WebsiteChart({ const { startDate, endDate, unit, value } = dateRange; const { data, isLoading, isFetching, error } = useWebsitePageviewsQuery({ websiteId, - compare: compareMode ? dateCompare?.['value'] : undefined, + compare: compareMode ? dateCompare : undefined, }); const { pageviews, sessions, compare } = (data || {}) as any; diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts index 2731e2680..6af169990 100644 --- a/src/components/hooks/index.ts +++ b/src/components/hooks/index.ts @@ -9,7 +9,6 @@ export * from './context/useWebsite'; // Query hooks export * from './queries/useActiveUsersQuery'; -export * from './queries/useDateRangeQuery'; export * from './queries/useDeleteQuery'; export * from './queries/useEventDataEventsQuery'; export * from './queries/useEventDataPropertiesQuery'; @@ -77,7 +76,6 @@ export * from './useModified'; export * from './useNavigation'; export * from './usePagedQuery'; export * from './usePageParameters'; -export * from './useQueryStringDate'; export * from './useRegionNames'; export * from './useSlug'; export * from './useSticky'; diff --git a/src/components/hooks/queries/useDateRangeQuery.ts b/src/components/hooks/queries/useDateRangeQuery.ts deleted file mode 100644 index 4af2011cb..000000000 --- a/src/components/hooks/queries/useDateRangeQuery.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { useApi } from '../useApi'; -import { ReactQueryOptions } from '@/lib/types'; - -export function useDateRangeQuery(websiteId: string, options?: ReactQueryOptions) { - const { get, useQuery } = useApi(); - return useQuery({ - queryKey: ['date-range', websiteId], - queryFn: () => get(`/websites/${websiteId}/daterange`), - enabled: !!websiteId, - ...options, - }); -} diff --git a/src/components/hooks/useDateRange.ts b/src/components/hooks/useDateRange.ts index dc81cfd7c..0a82d5a3e 100644 --- a/src/components/hooks/useDateRange.ts +++ b/src/components/hooks/useDateRange.ts @@ -1,35 +1,65 @@ -import { getMinimumUnit, parseDateRange } from '@/lib/date'; -import { useLocale } from '@/components/hooks/useLocale'; -import { useApi } from '@/components/hooks//useApi'; -import { useQueryStringDate } from '@/components/hooks/useQueryStringDate'; -import { useGlobalState } from '@/components/hooks/useGlobalState'; +import { useMemo } from 'react'; +import { getMinimumUnit, parseDateRange, getOffsetDateRange } from '@/lib/date'; +import { setItem } from '@/lib/storage'; +import { DATE_RANGE_CONFIG, DEFAULT_DATE_COMPARE, DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; +import { setWebsiteDateCompare, setWebsiteDateRange, useWebsites } from '@/store/websites'; +import { setDateRangeValue, useApp } from '@/store/app'; +import { useLocale } from './useLocale'; +import { useApi } from './useApi'; +import { useNavigation } from './useNavigation'; -export function useDateRange(websiteId: string) { +export interface UseDateRangeOptions { + ignoreOffset?: boolean; +} + +export function useDateRange(websiteId?: string, options: UseDateRangeOptions = {}) { const { get } = useApi(); const { locale } = useLocale(); - const { dateRange: defaultDateRange, dateCompare } = useQueryStringDate(); + const { + query: { date, offset = 0 }, + } = useNavigation(); + const websiteConfig = useWebsites(state => state[websiteId]?.dateRange); + const globalConfig = useApp(state => state.dateRangeValue); + const dateValue = websiteConfig?.value || date || globalConfig || DEFAULT_DATE_RANGE_VALUE; - const [dateRange, setDateRange] = useGlobalState(`date-range:${websiteId}`, defaultDateRange); + const dateRange = useMemo(() => { + const dateRangeObject = parseDateRange(dateValue, locale); - const setDateRangeValue = async (value: string) => { - if (value === 'all') { - const result = await get(`/websites/${websiteId}/daterange`); - const { mindate, maxdate } = result; + return !options.ignoreOffset && offset + ? getOffsetDateRange(dateRangeObject, +offset) + : dateRangeObject; + }, [date, offset, dateValue, options]); - const startDate = new Date(mindate); - const endDate = new Date(maxdate); - const unit = getMinimumUnit(startDate, endDate); + const dateCompare = useWebsites(state => state[websiteId]?.dateCompare || DEFAULT_DATE_COMPARE); - setDateRange({ - startDate, - endDate, - unit, - value, - }); + const saveDateRange = async (value: string) => { + if (websiteId) { + if (value === 'all') { + const result: any = await get(`/websites/${websiteId}/daterange`); + const { mindate, maxdate } = result; + + const startDate = new Date(mindate); + const endDate = new Date(maxdate); + const unit = getMinimumUnit(startDate, endDate); + + setWebsiteDateRange(websiteId, { + startDate, + endDate, + unit, + value, + }); + } else { + setWebsiteDateRange(websiteId, parseDateRange(value, locale)); + } } else { - setDateRange(parseDateRange(value, locale)); + setItem(DATE_RANGE_CONFIG, value); + setDateRangeValue(value); } }; - return { dateRange, dateCompare, setDateRange, setDateRangeValue }; + const saveDateCompare = (value: string) => { + setWebsiteDateCompare(websiteId, value); + }; + + return { dateRange, saveDateRange, dateCompare, saveDateCompare }; } diff --git a/src/components/hooks/useQueryStringDate.ts b/src/components/hooks/useQueryStringDate.ts deleted file mode 100644 index 3b6431a18..000000000 --- a/src/components/hooks/useQueryStringDate.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { useNavigation } from '@/components/hooks/useNavigation'; -import { useMemo } from 'react'; -import { getCompareDate, getOffsetDateRange, parseDateRange } from '@/lib/date'; -import { useLocale } from '@/components/hooks/useLocale'; -import { DEFAULT_DATE_RANGE_VALUE } from '@/lib/constants'; - -export function useQueryStringDate(options: { ignoreOffset?: boolean } = {}) { - const { - query: { date = DEFAULT_DATE_RANGE_VALUE, offset = 0, compare = 'prev' }, - } = useNavigation(); - const { locale } = useLocale(); - - const dateRange = useMemo(() => { - const dateRangeObject = parseDateRange(date, locale); - - return !options.ignoreOffset && offset - ? getOffsetDateRange(dateRangeObject, +offset) - : dateRangeObject; - }, [date, offset, options]); - - const dateCompare = getCompareDate(compare, dateRange.startDate, dateRange.endDate); - - return { date, offset, dateRange, dateCompare }; -} diff --git a/src/components/input/WebsiteDateFilter.tsx b/src/components/input/WebsiteDateFilter.tsx index 469da4190..1045de211 100644 --- a/src/components/input/WebsiteDateFilter.tsx +++ b/src/components/input/WebsiteDateFilter.tsx @@ -3,8 +3,6 @@ import { isAfter } from 'date-fns'; import { ChevronRight } from '@/components/icons'; import { useDateRange, useMessages, useNavigation } from '@/components/hooks'; import { DateFilter } from './DateFilter'; -import { getOffsetDateRange } from '@/lib/date'; -import { useCallback } from 'react'; export interface WebsiteDateFilterProps { websiteId: string; @@ -20,7 +18,7 @@ export function WebsiteDateFilter({ showButtons = true, allowCompare, }: WebsiteDateFilterProps) { - const { dateRange, setDateRange, setDateRangeValue } = useDateRange(websiteId); + const { dateRange, saveDateRange } = useDateRange(websiteId); const { value, endDate } = dateRange; const { formatMessage, labels } = useMessages(); const { @@ -29,25 +27,18 @@ export function WebsiteDateFilter({ query: { compare = 'prev', offset = 0 }, } = useNavigation(); const isAllTime = value === 'all'; - const isCustomRange = value.startsWith('range'); const disableForward = value === 'all' || isAfter(endDate, new Date()); const handleChange = (date: string) => { - setDateRangeValue(date); + saveDateRange(date); router.push(updateParams({ date, offset: undefined })); }; - const handleIncrement = useCallback( - (increment: number) => { - const offsetDate = getOffsetDateRange(dateRange, +offset + increment); - - setDateRange(offsetDate); - router.push(updateParams({ offset: +offset + increment })); - }, - [offset], - ); + const handleIncrement = (increment: number) => { + router.push(updateParams({ offset: +offset + increment })); + }; const handleSelect = (compare: any) => { router.push(updateParams({ compare })); diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts index 35f716be3..346f118e9 100644 --- a/src/lib/prisma.ts +++ b/src/lib/prisma.ts @@ -187,7 +187,9 @@ async function rawQuery(sql: string, data: Record, name?: string): return `$${params.length}${type ?? ''}`; }); - return client.$queryRawUnsafe(query, ...params); + return process.env.DATABASE_REPLICA_URL + ? await client.$replica().$queryRawUnsafe(query, ...params) + : await client.$queryRawUnsafe(query, ...params); } async function pagedQuery(model: string, criteria: T, filters?: QueryFilters) { @@ -281,7 +283,6 @@ function getClient() { url: process.env.DATABASE_URL, prismaClient: PrismaClient, logQuery: !!process.env.LOG_QUERY, - replicaUrl: process.env.DATABASE_REPLICA_URL, }); if (process.env.NODE_ENV !== 'production') { @@ -291,7 +292,7 @@ function getClient() { return prisma.client; } -const client: PrismaClient = globalThis[PRISMA] || getClient(); +const client = globalThis[PRISMA] || getClient(); export default { client, diff --git a/src/queries/prisma/link.ts b/src/queries/prisma/link.ts index 95e202b04..ea46023cb 100644 --- a/src/queries/prisma/link.ts +++ b/src/queries/prisma/link.ts @@ -1,12 +1,12 @@ -import { Prisma } from '@/generated/prisma/client'; +import { Prisma, Link } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import { PageResult, QueryFilters } from '@/lib/types'; -export async function findLink(criteria: Prisma.LinkFindUniqueArgs) { +export async function findLink(criteria: Prisma.LinkFindUniqueArgs): Promise { return prisma.client.link.findUnique(criteria); } -export async function getLink(linkId: string) { +export async function getLink(linkId: string): Promise { return findLink({ where: { id: linkId, @@ -14,7 +14,10 @@ export async function getLink(linkId: string) { }); } -export async function getLinks(criteria: Prisma.LinkFindManyArgs, filters: QueryFilters = {}) { +export async function getLinks( + criteria: Prisma.LinkFindManyArgs, + filters: QueryFilters = {}, +): Promise> { const { search } = filters; const { getSearchParameters, pagedQuery } = prisma; @@ -30,7 +33,10 @@ export async function getLinks(criteria: Prisma.LinkFindManyArgs, filters: Query return pagedQuery('link', { ...criteria, where }, filters); } -export async function getUserLinks(userId: string, filters?: QueryFilters) { +export async function getUserLinks( + userId: string, + filters?: QueryFilters, +): Promise> { return getLinks( { where: { @@ -42,7 +48,10 @@ export async function getUserLinks(userId: string, filters?: QueryFilters) { ); } -export async function getTeamLinks(teamId: string, filters?: QueryFilters) { +export async function getTeamLinks( + teamId: string, + filters?: QueryFilters, +): Promise> { return getLinks( { where: { @@ -53,14 +62,14 @@ export async function getTeamLinks(teamId: string, filters?: QueryFilters) { ); } -export async function createLink(data: Prisma.LinkUncheckedCreateInput) { +export async function createLink(data: Prisma.LinkUncheckedCreateInput): Promise { return prisma.client.link.create({ data }); } -export async function updateLink(linkId: string, data: any) { +export async function updateLink(linkId: string, data: any): Promise { return prisma.client.link.update({ where: { id: linkId }, data }); } -export async function deleteLink(linkId: string) { +export async function deleteLink(linkId: string): Promise { return prisma.client.link.delete({ where: { id: linkId } }); } diff --git a/src/queries/prisma/pixel.ts b/src/queries/prisma/pixel.ts index 36efe01d1..a68c53001 100644 --- a/src/queries/prisma/pixel.ts +++ b/src/queries/prisma/pixel.ts @@ -1,12 +1,12 @@ -import { Prisma } from '@/generated/prisma/client'; +import { Prisma, Pixel } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import { PageResult, QueryFilters } from '@/lib/types'; -export async function findPixel(criteria: Prisma.PixelFindUniqueArgs) { +export async function findPixel(criteria: Prisma.PixelFindUniqueArgs): Promise { return prisma.client.pixel.findUnique(criteria); } -export async function getPixel(pixelId: string) { +export async function getPixel(pixelId: string): Promise { return findPixel({ where: { id: pixelId, @@ -14,7 +14,10 @@ export async function getPixel(pixelId: string) { }); } -export async function getPixels(criteria: Prisma.PixelFindManyArgs, filters: QueryFilters = {}) { +export async function getPixels( + criteria: Prisma.PixelFindManyArgs, + filters: QueryFilters = {}, +): Promise> { const { search } = filters; const where: Prisma.PixelWhereInput = { @@ -25,7 +28,10 @@ export async function getPixels(criteria: Prisma.PixelFindManyArgs, filters: Que return prisma.pagedQuery('pixel', { ...criteria, where }, filters); } -export async function getUserPixels(userId: string, filters?: QueryFilters) { +export async function getUserPixels( + userId: string, + filters?: QueryFilters, +): Promise> { return getPixels( { where: { @@ -36,7 +42,10 @@ export async function getUserPixels(userId: string, filters?: QueryFilters) { ); } -export async function getTeamPixels(teamId: string, filters?: QueryFilters) { +export async function getTeamPixels( + teamId: string, + filters?: QueryFilters, +): Promise> { return getPixels( { where: { @@ -47,14 +56,14 @@ export async function getTeamPixels(teamId: string, filters?: QueryFilters) { ); } -export async function createPixel(data: Prisma.PixelUncheckedCreateInput) { +export async function createPixel(data: Prisma.PixelUncheckedCreateInput): Promise { return prisma.client.pixel.create({ data }); } -export async function updatePixel(pixelId: string, data: any) { +export async function updatePixel(pixelId: string, data: any): Promise { return prisma.client.pixel.update({ where: { id: pixelId }, data }); } -export async function deletePixel(pixelId: string) { +export async function deletePixel(pixelId: string): Promise { return prisma.client.pixel.delete({ where: { id: pixelId } }); } diff --git a/src/queries/prisma/report.ts b/src/queries/prisma/report.ts index c612864d3..322193d26 100644 --- a/src/queries/prisma/report.ts +++ b/src/queries/prisma/report.ts @@ -1,13 +1,13 @@ -import { Prisma } from '@/generated/prisma/client'; +import { Prisma, Report } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import { PageResult, QueryFilters } from '@/lib/types'; import ReportFindManyArgs = Prisma.ReportFindManyArgs; -async function findReport(criteria: Prisma.ReportFindUniqueArgs) { +async function findReport(criteria: Prisma.ReportFindUniqueArgs): Promise { return prisma.client.report.findUnique(criteria); } -export async function getReport(reportId: string) { +export async function getReport(reportId: string): Promise { return findReport({ where: { id: reportId, @@ -15,7 +15,10 @@ export async function getReport(reportId: string) { }); } -export async function getReports(criteria: ReportFindManyArgs, filters: QueryFilters = {}) { +export async function getReports( + criteria: ReportFindManyArgs, + filters: QueryFilters = {}, +): Promise> { const { search } = filters; const where: Prisma.ReportWhereInput = { @@ -45,7 +48,10 @@ export async function getReports(criteria: ReportFindManyArgs, filters: QueryFil return prisma.pagedQuery('report', { ...criteria, where }, filters); } -export async function getUserReports(userId: string, filters?: QueryFilters) { +export async function getUserReports( + userId: string, + filters?: QueryFilters, +): Promise> { return getReports( { where: { @@ -64,7 +70,10 @@ export async function getUserReports(userId: string, filters?: QueryFilters) { ); } -export async function getWebsiteReports(websiteId: string, filters: QueryFilters = {}) { +export async function getWebsiteReports( + websiteId: string, + filters: QueryFilters = {}, +): Promise> { return getReports( { where: { @@ -75,14 +84,14 @@ export async function getWebsiteReports(websiteId: string, filters: QueryFilters ); } -export async function createReport(data: Prisma.ReportUncheckedCreateInput) { +export async function createReport(data: Prisma.ReportUncheckedCreateInput): Promise { return prisma.client.report.create({ data }); } -export async function updateReport(reportId: string, data: any) { +export async function updateReport(reportId: string, data: any): Promise { return prisma.client.report.update({ where: { id: reportId }, data }); } -export async function deleteReport(reportId: string) { +export async function deleteReport(reportId: string): Promise { return prisma.client.report.delete({ where: { id: reportId } }); } diff --git a/src/queries/prisma/segment.ts b/src/queries/prisma/segment.ts index f5507a4bb..60c64b3a2 100644 --- a/src/queries/prisma/segment.ts +++ b/src/queries/prisma/segment.ts @@ -1,12 +1,12 @@ import prisma from '@/lib/prisma'; -import { Prisma } from '@/generated/prisma/client'; -import { QueryFilters } from '@/lib/types'; +import { Prisma, Segment } from '@/generated/prisma/client'; +import { PageResult, QueryFilters } from '@/lib/types'; -async function findSegment(criteria: Prisma.SegmentFindUniqueArgs) { - return prisma.client.segment.findUnique(criteria); +async function findSegment(criteria: Prisma.SegmentFindUniqueArgs): Promise { + return prisma.client.Segment.findUnique(criteria); } -export async function getSegment(segmentId: string) { +export async function getSegment(segmentId: string): Promise { return findSegment({ where: { id: segmentId, @@ -14,7 +14,10 @@ export async function getSegment(segmentId: string) { }); } -export async function getSegments(criteria: Prisma.SegmentFindManyArgs, filters: QueryFilters) { +export async function getSegments( + criteria: Prisma.SegmentFindManyArgs, + filters: QueryFilters, +): Promise> { const { search } = filters; const { getSearchParameters, pagedQuery } = prisma; @@ -30,13 +33,17 @@ export async function getSegments(criteria: Prisma.SegmentFindManyArgs, filters: return pagedQuery('segment', { ...criteria, where }, filters); } -export async function getWebsiteSegment(websiteId: string, segmentId: string) { - return prisma.client.segment.findFirst({ +export async function getWebsiteSegment(websiteId: string, segmentId: string): Promise { + return prisma.client.Segment.findFirst({ where: { id: segmentId, websiteId }, }); } -export async function getWebsiteSegments(websiteId: string, type: string, filters?: QueryFilters) { +export async function getWebsiteSegments( + websiteId: string, + type: string, + filters?: QueryFilters, +): Promise> { return getSegments( { where: { @@ -48,14 +55,17 @@ export async function getWebsiteSegments(websiteId: string, type: string, filter ); } -export async function createSegment(data: Prisma.SegmentUncheckedCreateInput) { - return prisma.client.segment.create({ data }); +export async function createSegment(data: Prisma.SegmentUncheckedCreateInput): Promise { + return prisma.client.Segment.create({ data }); } -export async function updateSegment(SegmentId: string, data: Prisma.SegmentUpdateInput) { - return prisma.client.segment.update({ where: { id: SegmentId }, data }); +export async function updateSegment( + SegmentId: string, + data: Prisma.SegmentUpdateInput, +): Promise { + return prisma.client.Segment.update({ where: { id: SegmentId }, data }); } -export async function deleteSegment(SegmentId: string) { - return prisma.client.segment.delete({ where: { id: SegmentId } }); +export async function deleteSegment(SegmentId: string): Promise { + return prisma.client.Segment.delete({ where: { id: SegmentId } }); } diff --git a/src/queries/prisma/team.ts b/src/queries/prisma/team.ts index 64ae0ec88..b342c9554 100644 --- a/src/queries/prisma/team.ts +++ b/src/queries/prisma/team.ts @@ -9,10 +9,7 @@ export async function findTeam(criteria: Prisma.TeamFindUniqueArgs): Promise { +export async function getTeam(teamId: string, options: { includeMembers?: boolean } = {}) { const { includeMembers } = options; return findTeam({ @@ -132,9 +129,11 @@ export async function updateTeam(teamId: string, data: Prisma.TeamUpdateInput): }); } -export async function deleteTeam(teamId: string) { +export async function deleteTeam( + teamId: string, +): Promise> { const { client, transaction } = prisma; - const cloudMode = !!process.env.CLOUD_MODE; + const cloudMode = !!process.env.CLOUD_URL; if (cloudMode) { return transaction([ diff --git a/src/queries/prisma/teamUser.ts b/src/queries/prisma/teamUser.ts index d7c3807ca..3f9d9fcd0 100644 --- a/src/queries/prisma/teamUser.ts +++ b/src/queries/prisma/teamUser.ts @@ -1,14 +1,14 @@ import { uuid } from '@/lib/crypto'; -import { Prisma } from '@/generated/prisma/client'; +import { Prisma, TeamUser } from '@/generated/prisma/client'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import { PageResult, QueryFilters } from '@/lib/types'; import TeamUserFindManyArgs = Prisma.TeamUserFindManyArgs; -export async function findTeamUser(criteria: Prisma.TeamUserFindUniqueArgs) { +export async function findTeamUser(criteria: Prisma.TeamUserFindUniqueArgs): Promise { return prisma.client.teamUser.findUnique(criteria); } -export async function getTeamUser(teamId: string, userId: string) { +export async function getTeamUser(teamId: string, userId: string): Promise { return prisma.client.teamUser.findFirst({ where: { teamId, @@ -17,7 +17,10 @@ export async function getTeamUser(teamId: string, userId: string) { }); } -export async function getTeamUsers(criteria: TeamUserFindManyArgs, filters?: QueryFilters) { +export async function getTeamUsers( + criteria: TeamUserFindManyArgs, + filters?: QueryFilters, +): Promise> { const { search } = filters; const where: Prisma.TeamUserWhereInput = { @@ -35,7 +38,11 @@ export async function getTeamUsers(criteria: TeamUserFindManyArgs, filters?: Que ); } -export async function createTeamUser(userId: string, teamId: string, role: string) { +export async function createTeamUser( + userId: string, + teamId: string, + role: string, +): Promise { return prisma.client.teamUser.create({ data: { id: uuid(), @@ -46,7 +53,10 @@ export async function createTeamUser(userId: string, teamId: string, role: strin }); } -export async function updateTeamUser(teamUserId: string, data: Prisma.TeamUserUpdateInput) { +export async function updateTeamUser( + teamUserId: string, + data: Prisma.TeamUserUpdateInput, +): Promise { return prisma.client.teamUser.update({ where: { id: teamUserId, @@ -55,7 +65,7 @@ export async function updateTeamUser(teamUserId: string, data: Prisma.TeamUserUp }); } -export async function deleteTeamUser(teamId: string, userId: string) { +export async function deleteTeamUser(teamId: string, userId: string): Promise { return prisma.client.teamUser.deleteMany({ where: { teamId, diff --git a/src/queries/prisma/user.ts b/src/queries/prisma/user.ts index c599e3866..a1360efe2 100644 --- a/src/queries/prisma/user.ts +++ b/src/queries/prisma/user.ts @@ -1,7 +1,7 @@ -import { Prisma } from '@/generated/prisma/client'; +import { Prisma, User } from '@/generated/prisma/client'; import { ROLES } from '@/lib/constants'; import prisma from '@/lib/prisma'; -import { Role, QueryFilters } from '@/lib/types'; +import { PageResult, Role, QueryFilters } from '@/lib/types'; import { getRandomChars } from '@/lib/generate'; import UserFindManyArgs = Prisma.UserFindManyArgs; @@ -10,7 +10,10 @@ export interface GetUserOptions { showDeleted?: boolean; } -async function findUser(criteria: Prisma.UserFindUniqueArgs, options: GetUserOptions = {}) { +async function findUser( + criteria: Prisma.UserFindUniqueArgs, + options: GetUserOptions = {}, +): Promise { const { includePassword = false, showDeleted = false } = options; return prisma.client.user.findUnique({ @@ -44,7 +47,10 @@ export async function getUserByUsername(username: string, options: GetUserOption return findUser({ where: { username } }, options); } -export async function getUsers(criteria: UserFindManyArgs, filters: QueryFilters = {}) { +export async function getUsers( + criteria: UserFindManyArgs, + filters: QueryFilters = {}, +): Promise> { const { search } = filters; const where: Prisma.UserWhereInput = { @@ -72,7 +78,11 @@ export async function createUser(data: { username: string; password: string; role: Role; -}) { +}): Promise<{ + id: string; + username: string; + role: string; +}> { return prisma.client.user.create({ data, select: { @@ -83,7 +93,7 @@ export async function createUser(data: { }); } -export async function updateUser(userId: string, data: Prisma.UserUpdateInput) { +export async function updateUser(userId: string, data: Prisma.UserUpdateInput): Promise { return prisma.client.user.update({ where: { id: userId, @@ -98,9 +108,21 @@ export async function updateUser(userId: string, data: Prisma.UserUpdateInput) { }); } -export async function deleteUser(userId: string) { +export async function deleteUser( + userId: string, +): Promise< + [ + Prisma.BatchPayload, + Prisma.BatchPayload, + Prisma.BatchPayload, + Prisma.BatchPayload, + Prisma.BatchPayload, + Prisma.BatchPayload, + User, + ] +> { const { client, transaction } = prisma; - const cloudMode = !!process.env.CLOUD_MODE; + const cloudMode = !!process.env.CLOUD_URL; const websites = await client.website.findMany({ where: { userId }, diff --git a/src/queries/prisma/website.ts b/src/queries/prisma/website.ts index b1a762b90..6a0c0913c 100644 --- a/src/queries/prisma/website.ts +++ b/src/queries/prisma/website.ts @@ -1,10 +1,10 @@ -import { Prisma } from '@/generated/prisma/client'; +import { Prisma, Website } from '@/generated/prisma/client'; import redis from '@/lib/redis'; import prisma from '@/lib/prisma'; -import { QueryFilters } from '@/lib/types'; +import { PageResult, QueryFilters } from '@/lib/types'; import { ROLES } from '@/lib/constants'; -export async function findWebsite(criteria: Prisma.WebsiteFindUniqueArgs) { +export async function findWebsite(criteria: Prisma.WebsiteFindUniqueArgs): Promise { return prisma.client.website.findUnique(criteria); } @@ -25,7 +25,10 @@ export async function getSharedWebsite(shareId: string) { }); } -export async function getWebsites(criteria: Prisma.WebsiteFindManyArgs, filters: QueryFilters) { +export async function getWebsites( + criteria: Prisma.WebsiteFindManyArgs, + filters: QueryFilters, +): Promise> { const { search } = filters; const { getSearchParameters, pagedQuery } = prisma; @@ -43,7 +46,10 @@ export async function getWebsites(criteria: Prisma.WebsiteFindManyArgs, filters: return pagedQuery('website', { ...criteria, where }, filters); } -export async function getAllUserWebsitesIncludingTeamOwner(userId: string, filters?: QueryFilters) { +export async function getAllUserWebsitesIncludingTeamOwner( + userId: string, + filters?: QueryFilters, +): Promise> { return getWebsites( { where: { @@ -70,7 +76,10 @@ export async function getAllUserWebsitesIncludingTeamOwner(userId: string, filte ); } -export async function getUserWebsites(userId: string, filters?: QueryFilters) { +export async function getUserWebsites( + userId: string, + filters?: QueryFilters, +): Promise> { return getWebsites( { where: { @@ -92,7 +101,10 @@ export async function getUserWebsites(userId: string, filters?: QueryFilters) { ); } -export async function getTeamWebsites(teamId: string, filters?: QueryFilters) { +export async function getTeamWebsites( + teamId: string, + filters?: QueryFilters, +): Promise> { return getWebsites( { where: { @@ -113,7 +125,7 @@ export async function getTeamWebsites(teamId: string, filters?: QueryFilters) { export async function createWebsite( data: Prisma.WebsiteCreateInput | Prisma.WebsiteUncheckedCreateInput, -) { +): Promise { return prisma.client.website.create({ data, }); @@ -122,7 +134,7 @@ export async function createWebsite( export async function updateWebsite( websiteId: string, data: Prisma.WebsiteUpdateInput | Prisma.WebsiteUncheckedUpdateInput, -) { +): Promise { return prisma.client.website.update({ where: { id: websiteId, @@ -131,9 +143,11 @@ export async function updateWebsite( }); } -export async function resetWebsite(websiteId: string) { +export async function resetWebsite( + websiteId: string, +): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> { const { client, transaction } = prisma; - const cloudMode = !!process.env.CLOUD_MODE; + const cloudMode = !!process.env.CLOUD_URL; return transaction([ client.eventData.deleteMany({ @@ -163,9 +177,11 @@ export async function resetWebsite(websiteId: string) { }); } -export async function deleteWebsite(websiteId: string) { +export async function deleteWebsite( + websiteId: string, +): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> { const { client, transaction } = prisma; - const cloudMode = !!process.env.CLOUD_MODE; + const cloudMode = !!process.env.CLOUD_URL; return transaction([ client.eventData.deleteMany({