Add house leaderboard feature: Integrate house leaderboard functionality in LeaderboardPage and LeaderboardSection components. Update userStatsService to fetch house leaderboard data, and enhance UI to display house rankings, scores, and member details. Update Prisma schema to include house-related models and relationships, and seed database with initial house data.
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled
This commit is contained in:
@@ -52,3 +52,23 @@ export type SitePreferences = Prisma.SitePreferencesModel
|
||||
*
|
||||
*/
|
||||
export type Challenge = Prisma.ChallengeModel
|
||||
/**
|
||||
* Model House
|
||||
*
|
||||
*/
|
||||
export type House = Prisma.HouseModel
|
||||
/**
|
||||
* Model HouseMembership
|
||||
*
|
||||
*/
|
||||
export type HouseMembership = Prisma.HouseMembershipModel
|
||||
/**
|
||||
* Model HouseInvitation
|
||||
*
|
||||
*/
|
||||
export type HouseInvitation = Prisma.HouseInvitationModel
|
||||
/**
|
||||
* Model HouseRequest
|
||||
*
|
||||
*/
|
||||
export type HouseRequest = Prisma.HouseRequestModel
|
||||
|
||||
@@ -74,3 +74,23 @@ export type SitePreferences = Prisma.SitePreferencesModel
|
||||
*
|
||||
*/
|
||||
export type Challenge = Prisma.ChallengeModel
|
||||
/**
|
||||
* Model House
|
||||
*
|
||||
*/
|
||||
export type House = Prisma.HouseModel
|
||||
/**
|
||||
* Model HouseMembership
|
||||
*
|
||||
*/
|
||||
export type HouseMembership = Prisma.HouseMembershipModel
|
||||
/**
|
||||
* Model HouseInvitation
|
||||
*
|
||||
*/
|
||||
export type HouseInvitation = Prisma.HouseInvitationModel
|
||||
/**
|
||||
* Model HouseRequest
|
||||
*
|
||||
*/
|
||||
export type HouseRequest = Prisma.HouseRequestModel
|
||||
|
||||
@@ -270,6 +270,57 @@ export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
|
||||
_max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type EnumHouseRoleFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.HouseRole | Prisma.EnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumHouseRoleFilter<$PrismaModel> | $Enums.HouseRole
|
||||
}
|
||||
|
||||
export type EnumHouseRoleWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.HouseRole | Prisma.EnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumHouseRoleWithAggregatesFilter<$PrismaModel> | $Enums.HouseRole
|
||||
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedEnumHouseRoleFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedEnumHouseRoleFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type EnumInvitationStatusFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.InvitationStatus | Prisma.EnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumInvitationStatusFilter<$PrismaModel> | $Enums.InvitationStatus
|
||||
}
|
||||
|
||||
export type EnumInvitationStatusWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.InvitationStatus | Prisma.EnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumInvitationStatusWithAggregatesFilter<$PrismaModel> | $Enums.InvitationStatus
|
||||
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedEnumInvitationStatusFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedEnumInvitationStatusFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type EnumRequestStatusFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.RequestStatus | Prisma.EnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumRequestStatusFilter<$PrismaModel> | $Enums.RequestStatus
|
||||
}
|
||||
|
||||
export type EnumRequestStatusWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.RequestStatus | Prisma.EnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumRequestStatusWithAggregatesFilter<$PrismaModel> | $Enums.RequestStatus
|
||||
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedEnumRequestStatusFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedEnumRequestStatusFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedStringFilter<$PrismaModel = never> = {
|
||||
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
||||
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
||||
@@ -539,4 +590,55 @@ export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
|
||||
_max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedEnumHouseRoleFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.HouseRole | Prisma.EnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumHouseRoleFilter<$PrismaModel> | $Enums.HouseRole
|
||||
}
|
||||
|
||||
export type NestedEnumHouseRoleWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.HouseRole | Prisma.EnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.HouseRole[] | Prisma.ListEnumHouseRoleFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumHouseRoleWithAggregatesFilter<$PrismaModel> | $Enums.HouseRole
|
||||
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedEnumHouseRoleFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedEnumHouseRoleFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedEnumInvitationStatusFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.InvitationStatus | Prisma.EnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumInvitationStatusFilter<$PrismaModel> | $Enums.InvitationStatus
|
||||
}
|
||||
|
||||
export type NestedEnumInvitationStatusWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.InvitationStatus | Prisma.EnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.InvitationStatus[] | Prisma.ListEnumInvitationStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumInvitationStatusWithAggregatesFilter<$PrismaModel> | $Enums.InvitationStatus
|
||||
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedEnumInvitationStatusFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedEnumInvitationStatusFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
export type NestedEnumRequestStatusFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.RequestStatus | Prisma.EnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumRequestStatusFilter<$PrismaModel> | $Enums.RequestStatus
|
||||
}
|
||||
|
||||
export type NestedEnumRequestStatusWithAggregatesFilter<$PrismaModel = never> = {
|
||||
equals?: $Enums.RequestStatus | Prisma.EnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
in?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
notIn?: $Enums.RequestStatus[] | Prisma.ListEnumRequestStatusFieldRefInput<$PrismaModel>
|
||||
not?: Prisma.NestedEnumRequestStatusWithAggregatesFilter<$PrismaModel> | $Enums.RequestStatus
|
||||
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
||||
_min?: Prisma.NestedEnumRequestStatusFilter<$PrismaModel>
|
||||
_max?: Prisma.NestedEnumRequestStatusFilter<$PrismaModel>
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -52,3 +52,32 @@ export const ChallengeStatus = {
|
||||
} as const
|
||||
|
||||
export type ChallengeStatus = (typeof ChallengeStatus)[keyof typeof ChallengeStatus]
|
||||
|
||||
|
||||
export const HouseRole = {
|
||||
OWNER: 'OWNER',
|
||||
ADMIN: 'ADMIN',
|
||||
MEMBER: 'MEMBER'
|
||||
} as const
|
||||
|
||||
export type HouseRole = (typeof HouseRole)[keyof typeof HouseRole]
|
||||
|
||||
|
||||
export const InvitationStatus = {
|
||||
PENDING: 'PENDING',
|
||||
ACCEPTED: 'ACCEPTED',
|
||||
REJECTED: 'REJECTED',
|
||||
CANCELLED: 'CANCELLED'
|
||||
} as const
|
||||
|
||||
export type InvitationStatus = (typeof InvitationStatus)[keyof typeof InvitationStatus]
|
||||
|
||||
|
||||
export const RequestStatus = {
|
||||
PENDING: 'PENDING',
|
||||
ACCEPTED: 'ACCEPTED',
|
||||
REJECTED: 'REJECTED',
|
||||
CANCELLED: 'CANCELLED'
|
||||
} as const
|
||||
|
||||
export type RequestStatus = (typeof RequestStatus)[keyof typeof RequestStatus]
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -390,7 +390,11 @@ export const ModelName = {
|
||||
EventRegistration: 'EventRegistration',
|
||||
EventFeedback: 'EventFeedback',
|
||||
SitePreferences: 'SitePreferences',
|
||||
Challenge: 'Challenge'
|
||||
Challenge: 'Challenge',
|
||||
House: 'House',
|
||||
HouseMembership: 'HouseMembership',
|
||||
HouseInvitation: 'HouseInvitation',
|
||||
HouseRequest: 'HouseRequest'
|
||||
} as const
|
||||
|
||||
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
||||
@@ -406,7 +410,7 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
|
||||
omit: GlobalOmitOptions
|
||||
}
|
||||
meta: {
|
||||
modelProps: "user" | "userPreferences" | "event" | "eventRegistration" | "eventFeedback" | "sitePreferences" | "challenge"
|
||||
modelProps: "user" | "userPreferences" | "event" | "eventRegistration" | "eventFeedback" | "sitePreferences" | "challenge" | "house" | "houseMembership" | "houseInvitation" | "houseRequest"
|
||||
txIsolationLevel: TransactionIsolationLevel
|
||||
}
|
||||
model: {
|
||||
@@ -928,6 +932,302 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
|
||||
}
|
||||
}
|
||||
}
|
||||
House: {
|
||||
payload: Prisma.$HousePayload<ExtArgs>
|
||||
fields: Prisma.HouseFieldRefs
|
||||
operations: {
|
||||
findUnique: {
|
||||
args: Prisma.HouseFindUniqueArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload> | null
|
||||
}
|
||||
findUniqueOrThrow: {
|
||||
args: Prisma.HouseFindUniqueOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>
|
||||
}
|
||||
findFirst: {
|
||||
args: Prisma.HouseFindFirstArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload> | null
|
||||
}
|
||||
findFirstOrThrow: {
|
||||
args: Prisma.HouseFindFirstOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>
|
||||
}
|
||||
findMany: {
|
||||
args: Prisma.HouseFindManyArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>[]
|
||||
}
|
||||
create: {
|
||||
args: Prisma.HouseCreateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>
|
||||
}
|
||||
createMany: {
|
||||
args: Prisma.HouseCreateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
createManyAndReturn: {
|
||||
args: Prisma.HouseCreateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>[]
|
||||
}
|
||||
delete: {
|
||||
args: Prisma.HouseDeleteArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>
|
||||
}
|
||||
update: {
|
||||
args: Prisma.HouseUpdateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>
|
||||
}
|
||||
deleteMany: {
|
||||
args: Prisma.HouseDeleteManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateMany: {
|
||||
args: Prisma.HouseUpdateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateManyAndReturn: {
|
||||
args: Prisma.HouseUpdateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>[]
|
||||
}
|
||||
upsert: {
|
||||
args: Prisma.HouseUpsertArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HousePayload>
|
||||
}
|
||||
aggregate: {
|
||||
args: Prisma.HouseAggregateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.AggregateHouse>
|
||||
}
|
||||
groupBy: {
|
||||
args: Prisma.HouseGroupByArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseGroupByOutputType>[]
|
||||
}
|
||||
count: {
|
||||
args: Prisma.HouseCountArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseCountAggregateOutputType> | number
|
||||
}
|
||||
}
|
||||
}
|
||||
HouseMembership: {
|
||||
payload: Prisma.$HouseMembershipPayload<ExtArgs>
|
||||
fields: Prisma.HouseMembershipFieldRefs
|
||||
operations: {
|
||||
findUnique: {
|
||||
args: Prisma.HouseMembershipFindUniqueArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload> | null
|
||||
}
|
||||
findUniqueOrThrow: {
|
||||
args: Prisma.HouseMembershipFindUniqueOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>
|
||||
}
|
||||
findFirst: {
|
||||
args: Prisma.HouseMembershipFindFirstArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload> | null
|
||||
}
|
||||
findFirstOrThrow: {
|
||||
args: Prisma.HouseMembershipFindFirstOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>
|
||||
}
|
||||
findMany: {
|
||||
args: Prisma.HouseMembershipFindManyArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>[]
|
||||
}
|
||||
create: {
|
||||
args: Prisma.HouseMembershipCreateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>
|
||||
}
|
||||
createMany: {
|
||||
args: Prisma.HouseMembershipCreateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
createManyAndReturn: {
|
||||
args: Prisma.HouseMembershipCreateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>[]
|
||||
}
|
||||
delete: {
|
||||
args: Prisma.HouseMembershipDeleteArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>
|
||||
}
|
||||
update: {
|
||||
args: Prisma.HouseMembershipUpdateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>
|
||||
}
|
||||
deleteMany: {
|
||||
args: Prisma.HouseMembershipDeleteManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateMany: {
|
||||
args: Prisma.HouseMembershipUpdateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateManyAndReturn: {
|
||||
args: Prisma.HouseMembershipUpdateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>[]
|
||||
}
|
||||
upsert: {
|
||||
args: Prisma.HouseMembershipUpsertArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseMembershipPayload>
|
||||
}
|
||||
aggregate: {
|
||||
args: Prisma.HouseMembershipAggregateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.AggregateHouseMembership>
|
||||
}
|
||||
groupBy: {
|
||||
args: Prisma.HouseMembershipGroupByArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseMembershipGroupByOutputType>[]
|
||||
}
|
||||
count: {
|
||||
args: Prisma.HouseMembershipCountArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseMembershipCountAggregateOutputType> | number
|
||||
}
|
||||
}
|
||||
}
|
||||
HouseInvitation: {
|
||||
payload: Prisma.$HouseInvitationPayload<ExtArgs>
|
||||
fields: Prisma.HouseInvitationFieldRefs
|
||||
operations: {
|
||||
findUnique: {
|
||||
args: Prisma.HouseInvitationFindUniqueArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload> | null
|
||||
}
|
||||
findUniqueOrThrow: {
|
||||
args: Prisma.HouseInvitationFindUniqueOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>
|
||||
}
|
||||
findFirst: {
|
||||
args: Prisma.HouseInvitationFindFirstArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload> | null
|
||||
}
|
||||
findFirstOrThrow: {
|
||||
args: Prisma.HouseInvitationFindFirstOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>
|
||||
}
|
||||
findMany: {
|
||||
args: Prisma.HouseInvitationFindManyArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>[]
|
||||
}
|
||||
create: {
|
||||
args: Prisma.HouseInvitationCreateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>
|
||||
}
|
||||
createMany: {
|
||||
args: Prisma.HouseInvitationCreateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
createManyAndReturn: {
|
||||
args: Prisma.HouseInvitationCreateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>[]
|
||||
}
|
||||
delete: {
|
||||
args: Prisma.HouseInvitationDeleteArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>
|
||||
}
|
||||
update: {
|
||||
args: Prisma.HouseInvitationUpdateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>
|
||||
}
|
||||
deleteMany: {
|
||||
args: Prisma.HouseInvitationDeleteManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateMany: {
|
||||
args: Prisma.HouseInvitationUpdateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateManyAndReturn: {
|
||||
args: Prisma.HouseInvitationUpdateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>[]
|
||||
}
|
||||
upsert: {
|
||||
args: Prisma.HouseInvitationUpsertArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseInvitationPayload>
|
||||
}
|
||||
aggregate: {
|
||||
args: Prisma.HouseInvitationAggregateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.AggregateHouseInvitation>
|
||||
}
|
||||
groupBy: {
|
||||
args: Prisma.HouseInvitationGroupByArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseInvitationGroupByOutputType>[]
|
||||
}
|
||||
count: {
|
||||
args: Prisma.HouseInvitationCountArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseInvitationCountAggregateOutputType> | number
|
||||
}
|
||||
}
|
||||
}
|
||||
HouseRequest: {
|
||||
payload: Prisma.$HouseRequestPayload<ExtArgs>
|
||||
fields: Prisma.HouseRequestFieldRefs
|
||||
operations: {
|
||||
findUnique: {
|
||||
args: Prisma.HouseRequestFindUniqueArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload> | null
|
||||
}
|
||||
findUniqueOrThrow: {
|
||||
args: Prisma.HouseRequestFindUniqueOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>
|
||||
}
|
||||
findFirst: {
|
||||
args: Prisma.HouseRequestFindFirstArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload> | null
|
||||
}
|
||||
findFirstOrThrow: {
|
||||
args: Prisma.HouseRequestFindFirstOrThrowArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>
|
||||
}
|
||||
findMany: {
|
||||
args: Prisma.HouseRequestFindManyArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>[]
|
||||
}
|
||||
create: {
|
||||
args: Prisma.HouseRequestCreateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>
|
||||
}
|
||||
createMany: {
|
||||
args: Prisma.HouseRequestCreateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
createManyAndReturn: {
|
||||
args: Prisma.HouseRequestCreateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>[]
|
||||
}
|
||||
delete: {
|
||||
args: Prisma.HouseRequestDeleteArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>
|
||||
}
|
||||
update: {
|
||||
args: Prisma.HouseRequestUpdateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>
|
||||
}
|
||||
deleteMany: {
|
||||
args: Prisma.HouseRequestDeleteManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateMany: {
|
||||
args: Prisma.HouseRequestUpdateManyArgs<ExtArgs>
|
||||
result: BatchPayload
|
||||
}
|
||||
updateManyAndReturn: {
|
||||
args: Prisma.HouseRequestUpdateManyAndReturnArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>[]
|
||||
}
|
||||
upsert: {
|
||||
args: Prisma.HouseRequestUpsertArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.PayloadToResult<Prisma.$HouseRequestPayload>
|
||||
}
|
||||
aggregate: {
|
||||
args: Prisma.HouseRequestAggregateArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.AggregateHouseRequest>
|
||||
}
|
||||
groupBy: {
|
||||
args: Prisma.HouseRequestGroupByArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseRequestGroupByOutputType>[]
|
||||
}
|
||||
count: {
|
||||
args: Prisma.HouseRequestCountArgs<ExtArgs>
|
||||
result: runtime.Types.Utils.Optional<Prisma.HouseRequestCountAggregateOutputType> | number
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} & {
|
||||
other: {
|
||||
@@ -1078,6 +1378,54 @@ export const ChallengeScalarFieldEnum = {
|
||||
export type ChallengeScalarFieldEnum = (typeof ChallengeScalarFieldEnum)[keyof typeof ChallengeScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseScalarFieldEnum = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
creatorId: 'creatorId',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
export type HouseScalarFieldEnum = (typeof HouseScalarFieldEnum)[keyof typeof HouseScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseMembershipScalarFieldEnum = {
|
||||
id: 'id',
|
||||
houseId: 'houseId',
|
||||
userId: 'userId',
|
||||
role: 'role',
|
||||
joinedAt: 'joinedAt'
|
||||
} as const
|
||||
|
||||
export type HouseMembershipScalarFieldEnum = (typeof HouseMembershipScalarFieldEnum)[keyof typeof HouseMembershipScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseInvitationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
houseId: 'houseId',
|
||||
inviterId: 'inviterId',
|
||||
inviteeId: 'inviteeId',
|
||||
status: 'status',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
export type HouseInvitationScalarFieldEnum = (typeof HouseInvitationScalarFieldEnum)[keyof typeof HouseInvitationScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseRequestScalarFieldEnum = {
|
||||
id: 'id',
|
||||
houseId: 'houseId',
|
||||
requesterId: 'requesterId',
|
||||
status: 'status',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
export type HouseRequestScalarFieldEnum = (typeof HouseRequestScalarFieldEnum)[keyof typeof HouseRequestScalarFieldEnum]
|
||||
|
||||
|
||||
export const SortOrder = {
|
||||
asc: 'asc',
|
||||
desc: 'desc'
|
||||
@@ -1213,6 +1561,48 @@ export type ListEnumChallengeStatusFieldRefInput<$PrismaModel> = FieldRefInputTy
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'HouseRole'
|
||||
*/
|
||||
export type EnumHouseRoleFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'HouseRole'>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'HouseRole[]'
|
||||
*/
|
||||
export type ListEnumHouseRoleFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'HouseRole[]'>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'InvitationStatus'
|
||||
*/
|
||||
export type EnumInvitationStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'InvitationStatus'>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'InvitationStatus[]'
|
||||
*/
|
||||
export type ListEnumInvitationStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'InvitationStatus[]'>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'RequestStatus'
|
||||
*/
|
||||
export type EnumRequestStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'RequestStatus'>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'RequestStatus[]'
|
||||
*/
|
||||
export type ListEnumRequestStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'RequestStatus[]'>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reference to a field of type 'Float'
|
||||
*/
|
||||
@@ -1328,6 +1718,10 @@ export type GlobalOmitConfig = {
|
||||
eventFeedback?: Prisma.EventFeedbackOmit
|
||||
sitePreferences?: Prisma.SitePreferencesOmit
|
||||
challenge?: Prisma.ChallengeOmit
|
||||
house?: Prisma.HouseOmit
|
||||
houseMembership?: Prisma.HouseMembershipOmit
|
||||
houseInvitation?: Prisma.HouseInvitationOmit
|
||||
houseRequest?: Prisma.HouseRequestOmit
|
||||
}
|
||||
|
||||
/* Types for Logging */
|
||||
|
||||
@@ -57,7 +57,11 @@ export const ModelName = {
|
||||
EventRegistration: 'EventRegistration',
|
||||
EventFeedback: 'EventFeedback',
|
||||
SitePreferences: 'SitePreferences',
|
||||
Challenge: 'Challenge'
|
||||
Challenge: 'Challenge',
|
||||
House: 'House',
|
||||
HouseMembership: 'HouseMembership',
|
||||
HouseInvitation: 'HouseInvitation',
|
||||
HouseRequest: 'HouseRequest'
|
||||
} as const
|
||||
|
||||
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
||||
@@ -187,6 +191,54 @@ export const ChallengeScalarFieldEnum = {
|
||||
export type ChallengeScalarFieldEnum = (typeof ChallengeScalarFieldEnum)[keyof typeof ChallengeScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseScalarFieldEnum = {
|
||||
id: 'id',
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
creatorId: 'creatorId',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
export type HouseScalarFieldEnum = (typeof HouseScalarFieldEnum)[keyof typeof HouseScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseMembershipScalarFieldEnum = {
|
||||
id: 'id',
|
||||
houseId: 'houseId',
|
||||
userId: 'userId',
|
||||
role: 'role',
|
||||
joinedAt: 'joinedAt'
|
||||
} as const
|
||||
|
||||
export type HouseMembershipScalarFieldEnum = (typeof HouseMembershipScalarFieldEnum)[keyof typeof HouseMembershipScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseInvitationScalarFieldEnum = {
|
||||
id: 'id',
|
||||
houseId: 'houseId',
|
||||
inviterId: 'inviterId',
|
||||
inviteeId: 'inviteeId',
|
||||
status: 'status',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
export type HouseInvitationScalarFieldEnum = (typeof HouseInvitationScalarFieldEnum)[keyof typeof HouseInvitationScalarFieldEnum]
|
||||
|
||||
|
||||
export const HouseRequestScalarFieldEnum = {
|
||||
id: 'id',
|
||||
houseId: 'houseId',
|
||||
requesterId: 'requesterId',
|
||||
status: 'status',
|
||||
createdAt: 'createdAt',
|
||||
updatedAt: 'updatedAt'
|
||||
} as const
|
||||
|
||||
export type HouseRequestScalarFieldEnum = (typeof HouseRequestScalarFieldEnum)[keyof typeof HouseRequestScalarFieldEnum]
|
||||
|
||||
|
||||
export const SortOrder = {
|
||||
asc: 'asc',
|
||||
desc: 'desc'
|
||||
|
||||
@@ -15,4 +15,8 @@ export type * from './models/EventRegistration'
|
||||
export type * from './models/EventFeedback'
|
||||
export type * from './models/SitePreferences'
|
||||
export type * from './models/Challenge'
|
||||
export type * from './models/House'
|
||||
export type * from './models/HouseMembership'
|
||||
export type * from './models/HouseInvitation'
|
||||
export type * from './models/HouseRequest'
|
||||
export type * from './commonInputTypes'
|
||||
File diff suppressed because it is too large
Load Diff
120
prisma/migrations/20251217131946_add_houses_system/migration.sql
Normal file
120
prisma/migrations/20251217131946_add_houses_system/migration.sql
Normal file
@@ -0,0 +1,120 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "HouseRole" AS ENUM ('OWNER', 'ADMIN', 'MEMBER');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "InvitationStatus" AS ENUM ('PENDING', 'ACCEPTED', 'REJECTED', 'CANCELLED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "RequestStatus" AS ENUM ('PENDING', 'ACCEPTED', 'REJECTED', 'CANCELLED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "House" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"creatorId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "House_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HouseMembership" (
|
||||
"id" TEXT NOT NULL,
|
||||
"houseId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"role" "HouseRole" NOT NULL DEFAULT 'MEMBER',
|
||||
"joinedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "HouseMembership_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HouseInvitation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"houseId" TEXT NOT NULL,
|
||||
"inviterId" TEXT NOT NULL,
|
||||
"inviteeId" TEXT NOT NULL,
|
||||
"status" "InvitationStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HouseInvitation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "HouseRequest" (
|
||||
"id" TEXT NOT NULL,
|
||||
"houseId" TEXT NOT NULL,
|
||||
"requesterId" TEXT NOT NULL,
|
||||
"status" "RequestStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "HouseRequest_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "House_creatorId_idx" ON "House"("creatorId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "House_name_idx" ON "House"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HouseMembership_houseId_userId_key" ON "HouseMembership"("houseId", "userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseMembership_houseId_idx" ON "HouseMembership"("houseId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseMembership_userId_idx" ON "HouseMembership"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HouseInvitation_houseId_inviteeId_key" ON "HouseInvitation"("houseId", "inviteeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseInvitation_houseId_idx" ON "HouseInvitation"("houseId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseInvitation_inviteeId_idx" ON "HouseInvitation"("inviteeId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseInvitation_status_idx" ON "HouseInvitation"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "HouseRequest_houseId_requesterId_key" ON "HouseRequest"("houseId", "requesterId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseRequest_houseId_idx" ON "HouseRequest"("houseId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseRequest_requesterId_idx" ON "HouseRequest"("requesterId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "HouseRequest_status_idx" ON "HouseRequest"("status");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "House" ADD CONSTRAINT "House_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseMembership" ADD CONSTRAINT "HouseMembership_houseId_fkey" FOREIGN KEY ("houseId") REFERENCES "House"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseMembership" ADD CONSTRAINT "HouseMembership_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseInvitation" ADD CONSTRAINT "HouseInvitation_houseId_fkey" FOREIGN KEY ("houseId") REFERENCES "House"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseInvitation" ADD CONSTRAINT "HouseInvitation_inviterId_fkey" FOREIGN KEY ("inviterId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseInvitation" ADD CONSTRAINT "HouseInvitation_inviteeId_fkey" FOREIGN KEY ("inviteeId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseRequest" ADD CONSTRAINT "HouseRequest_houseId_fkey" FOREIGN KEY ("houseId") REFERENCES "House"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "HouseRequest" ADD CONSTRAINT "HouseRequest_requesterId_fkey" FOREIGN KEY ("requesterId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
@@ -31,6 +31,11 @@ model User {
|
||||
challengesAsChallenged Challenge[] @relation("Challenged")
|
||||
challengesAsAdmin Challenge[] @relation("AdminValidator")
|
||||
challengesAsWinner Challenge[] @relation("ChallengeWinner")
|
||||
houseMemberships HouseMembership[]
|
||||
houseInvitationsSent HouseInvitation[] @relation("Inviter")
|
||||
houseInvitationsReceived HouseInvitation[] @relation("Invitee")
|
||||
houseRequestsSent HouseRequest[] @relation("Requester")
|
||||
housesCreated House[] @relation("HouseCreator")
|
||||
|
||||
@@index([score])
|
||||
@@index([email])
|
||||
@@ -166,3 +171,87 @@ model Challenge {
|
||||
@@index([status])
|
||||
@@index([adminId])
|
||||
}
|
||||
|
||||
model House {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
description String?
|
||||
creatorId String
|
||||
creator User @relation("HouseCreator", fields: [creatorId], references: [id], onDelete: Cascade)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
memberships HouseMembership[]
|
||||
invitations HouseInvitation[]
|
||||
requests HouseRequest[]
|
||||
|
||||
@@index([creatorId])
|
||||
@@index([name])
|
||||
}
|
||||
|
||||
model HouseMembership {
|
||||
id String @id @default(cuid())
|
||||
houseId String
|
||||
userId String
|
||||
role HouseRole @default(MEMBER)
|
||||
joinedAt DateTime @default(now())
|
||||
house House @relation(fields: [houseId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([houseId, userId])
|
||||
@@index([houseId])
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
model HouseInvitation {
|
||||
id String @id @default(cuid())
|
||||
houseId String
|
||||
inviterId String // Utilisateur qui envoie l'invitation
|
||||
inviteeId String // Utilisateur invité
|
||||
status InvitationStatus @default(PENDING)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
house House @relation(fields: [houseId], references: [id], onDelete: Cascade)
|
||||
inviter User @relation("Inviter", fields: [inviterId], references: [id], onDelete: Cascade)
|
||||
invitee User @relation("Invitee", fields: [inviteeId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([houseId, inviteeId])
|
||||
@@index([houseId])
|
||||
@@index([inviteeId])
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
model HouseRequest {
|
||||
id String @id @default(cuid())
|
||||
houseId String
|
||||
requesterId String // Utilisateur qui demande à rejoindre
|
||||
status RequestStatus @default(PENDING)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
house House @relation(fields: [houseId], references: [id], onDelete: Cascade)
|
||||
requester User @relation("Requester", fields: [requesterId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([houseId, requesterId])
|
||||
@@index([houseId])
|
||||
@@index([requesterId])
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
enum HouseRole {
|
||||
OWNER
|
||||
ADMIN
|
||||
MEMBER
|
||||
}
|
||||
|
||||
enum InvitationStatus {
|
||||
PENDING
|
||||
ACCEPTED
|
||||
REJECTED
|
||||
CANCELLED
|
||||
}
|
||||
|
||||
enum RequestStatus {
|
||||
PENDING
|
||||
ACCEPTED
|
||||
REJECTED
|
||||
CANCELLED
|
||||
}
|
||||
|
||||
145
prisma/seed.ts
145
prisma/seed.ts
@@ -238,7 +238,150 @@ async function main() {
|
||||
})
|
||||
);
|
||||
|
||||
console.log("Seed completed:", { admin, users, events });
|
||||
// Créer les maisons Game of Thrones
|
||||
const housesData = [
|
||||
{
|
||||
name: "Maison Stark",
|
||||
description:
|
||||
"Winter is Coming. La Maison Stark de Winterfell règne sur le Nord depuis des millénaires. Fiers, loyaux et honorables, les Stark sont connus pour leur sens de la justice et leur connexion avec les anciens dieux. Leur devise rappelle que l'hiver approche toujours.",
|
||||
creatorId: users[0].id, // DragonSlayer99
|
||||
},
|
||||
{
|
||||
name: "Maison Lannister",
|
||||
description:
|
||||
"Hear Me Roar. La Maison Lannister de Castral Roc est la plus riche des Sept Royaumes. Célèbres pour leur ruse, leur ambition et leur devise 'Un Lannister paie toujours ses dettes', ils contrôlent les terres de l'Ouest avec une main de fer.",
|
||||
creatorId: users[1].id, // MineMaster
|
||||
},
|
||||
{
|
||||
name: "Maison Targaryen",
|
||||
description:
|
||||
"Fire and Blood. Les Targaryen sont les derniers descendants des seigneurs dragons de Valyria. Maîtres des dragons et des flammes, ils ont conquis les Sept Royaumes il y a trois cents ans. Leur sang de feu coule dans leurs veines.",
|
||||
creatorId: users[2].id, // CraftKing
|
||||
},
|
||||
{
|
||||
name: "Maison Baratheon",
|
||||
description:
|
||||
"Ours is the Fury. La Maison Baratheon de Port-Réal règne sur les Terres de l'Orage. Fondée par Orys Baratheon, compagnon d'Aegon le Conquérant, cette maison est connue pour sa force, sa détermination et sa fureur au combat.",
|
||||
creatorId: users[3].id, // ForestWalker
|
||||
},
|
||||
{
|
||||
name: "Maison Tyrell",
|
||||
description:
|
||||
"Growing Strong. La Maison Tyrell de Hautjardin contrôle le Bief, la région la plus fertile des Sept Royaumes. Maîtres de l'agriculture et du commerce, ils sont réputés pour leur richesse, leur diplomatie et leur capacité à faire fleurir même les terres les plus arides.",
|
||||
creatorId: users[4].id, // HolyGuardian
|
||||
},
|
||||
{
|
||||
name: "Maison Martell",
|
||||
description:
|
||||
"Unbowed, Unbent, Unbroken. La Maison Martell de Dorne n'a jamais été conquise. Fiers et indépendants, les Martell gouvernent les terres du Sud avec sagesse. Leur résilience légendaire et leur refus de se soumettre font d'eux des alliés redoutables.",
|
||||
creatorId: users[5].id, // TechSmith
|
||||
},
|
||||
{
|
||||
name: "Maison Greyjoy",
|
||||
description:
|
||||
"We Do Not Sow. La Maison Greyjoy des Îles de Fer règne sur les mers. Fiers guerriers et pillards redoutés, les Greyjoy ne cultivent pas la terre mais prennent ce qu'ils veulent par la force. Leur devise reflète leur nature de conquérants des océans.",
|
||||
creatorId: admin.id, // Admin crée seulement cette maison
|
||||
},
|
||||
];
|
||||
|
||||
// Supprimer toutes les maisons existantes avant de les recréer
|
||||
await prisma.house.deleteMany({});
|
||||
|
||||
// Créer les maisons avec leurs membres
|
||||
// On doit créer les maisons séquentiellement pour éviter les conflits de membres multiples
|
||||
const houses = [];
|
||||
const usedUserIds = new Set<string>();
|
||||
|
||||
for (let index = 0; index < housesData.length; index++) {
|
||||
const houseData = housesData[index];
|
||||
|
||||
// Vérifier si le créateur est déjà utilisé
|
||||
if (usedUserIds.has(houseData.creatorId)) {
|
||||
// Trouver un utilisateur disponible
|
||||
const availableUser = users.find((u) => !usedUserIds.has(u.id));
|
||||
if (!availableUser) {
|
||||
console.warn(
|
||||
`Pas d'utilisateur disponible pour ${houseData.name}, utilisation de l'admin`
|
||||
);
|
||||
// Utiliser l'admin seulement si vraiment nécessaire
|
||||
if (!usedUserIds.has(admin.id)) {
|
||||
houseData.creatorId = admin.id;
|
||||
} else {
|
||||
console.error(
|
||||
`Impossible de créer ${houseData.name}, tous les utilisateurs sont déjà dans une maison`
|
||||
);
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
houseData.creatorId = availableUser.id;
|
||||
}
|
||||
}
|
||||
|
||||
const house = await prisma.house.create({
|
||||
data: {
|
||||
name: houseData.name,
|
||||
description: houseData.description,
|
||||
creatorId: houseData.creatorId,
|
||||
memberships: {
|
||||
create: {
|
||||
userId: houseData.creatorId,
|
||||
role: "OWNER",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
usedUserIds.add(houseData.creatorId);
|
||||
|
||||
// Ajouter quelques membres supplémentaires pour certaines maisons
|
||||
if (index === 0 && users.length > 1 && !usedUserIds.has(users[1].id)) {
|
||||
// Stark : ajouter un membre
|
||||
await prisma.houseMembership.create({
|
||||
data: {
|
||||
houseId: house.id,
|
||||
userId: users[1].id,
|
||||
role: "MEMBER",
|
||||
},
|
||||
});
|
||||
usedUserIds.add(users[1].id);
|
||||
}
|
||||
if (index === 1 && users.length > 2 && !usedUserIds.has(users[2].id)) {
|
||||
// Lannister : ajouter deux membres
|
||||
await prisma.houseMembership.create({
|
||||
data: {
|
||||
houseId: house.id,
|
||||
userId: users[2].id,
|
||||
role: "MEMBER",
|
||||
},
|
||||
});
|
||||
usedUserIds.add(users[2].id);
|
||||
if (users.length > 3 && !usedUserIds.has(users[3].id)) {
|
||||
await prisma.houseMembership.create({
|
||||
data: {
|
||||
houseId: house.id,
|
||||
userId: users[3].id,
|
||||
role: "ADMIN",
|
||||
},
|
||||
});
|
||||
usedUserIds.add(users[3].id);
|
||||
}
|
||||
}
|
||||
if (index === 2 && users.length > 4 && !usedUserIds.has(users[4].id)) {
|
||||
// Targaryen : ajouter un membre
|
||||
await prisma.houseMembership.create({
|
||||
data: {
|
||||
houseId: house.id,
|
||||
userId: users[4].id,
|
||||
role: "MEMBER",
|
||||
},
|
||||
});
|
||||
usedUserIds.add(users[4].id);
|
||||
}
|
||||
|
||||
houses.push(house);
|
||||
}
|
||||
|
||||
console.log("Seed completed:", { admin, users, events, houses });
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user