Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/core/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@
.env.staging
.env.production

prisma/schema.prisma

**/secrets/*

4 changes: 3 additions & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
"dev": "yarn compile:watch",
"compile": "tsc -p tsconfig.json && yarn fix:paths",
"compile:watch": "tsc-watch --onSuccess \"yarn fix:paths\"",
"fix:paths": "tscpaths -p tsconfig.json -s ./src -o ./dist"
"fix:paths": "tscpaths -p tsconfig.json -s ./src -o ./dist",
"create:schema": "find prisma -name '*.prisma' -not -name \"schema.prisma\" -exec cat {} + > prisma/schema.prisma && prisma format",
"create:migration": "yarn create:schema && prisma migrate dev"
},
"devDependencies": {
"@types/request-ip": "^0.0.35",
Expand Down
15 changes: 15 additions & 0 deletions packages/core/prisma/base.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
datasource db {
provider = "postgresql"
url = env("Database.Url")
}

generator client {
provider = "prisma-client-js"
}

// ---- Shared

enum FundingType {
OneTime
Monthly
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
-- CreateEnum
CREATE TYPE "DiscussionType" AS ENUM ('ProposalDiscussion', 'CommonDiscussion');

-- CreateEnum
CREATE TYPE "DiscussionSubscriptionType" AS ENUM ('AllNotifications', 'OnlyMentions', 'NoNotification');

-- CreateEnum
CREATE TYPE "DiscussionMessageType" AS ENUM ('Message');

-- CreateTable
CREATE TABLE "Discussion"
(
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"topic" TEXT NOT NULL,
"description" TEXT NOT NULL,
"latestMessage" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "DiscussionSubscription"
(
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"latestMessageSeen" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"type" "DiscussionSubscriptionType" NOT NULL DEFAULT E'AllNotifications',
"discussionId" TEXT NOT NULL,

PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "DiscussionMessage"
(
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"type" "DiscussionMessageType" NOT NULL DEFAULT E'Message',
"message" TEXT NOT NULL,
"discussionId" TEXT,

PRIMARY KEY ("id")
);

-- AddForeignKey
ALTER TABLE "DiscussionSubscription"
ADD FOREIGN KEY ("discussionId") REFERENCES "Discussion" ("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "DiscussionMessage"
ADD FOREIGN KEY ("discussionId") REFERENCES "Discussion" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
Warnings:

- You are about to drop the column `latestMessageSeen` on the `DiscussionSubscription` table. All the data in the column will be lost.
- Added the required column `userId` to the `DiscussionMessage` table without a default value. This is not possible if the table is not empty.
- Made the column `discussionId` on table `DiscussionMessage` required. This step will fail if there are existing NULL values in that column.
- Added the required column `userId` to the `DiscussionSubscription` table without a default value. This is not possible if the table is not empty.

*/
-- AlterTable
ALTER TABLE "DiscussionMessage"
ADD COLUMN "userId" TEXT NOT NULL,
ALTER COLUMN "discussionId" SET NOT NULL;

-- AlterTable
ALTER TABLE "DiscussionSubscription"
DROP COLUMN "latestMessageSeen",
ADD COLUMN "userId" TEXT NOT NULL;

-- AddForeignKey
ALTER TABLE "DiscussionMessage"
ADD FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "DiscussionSubscription"
ADD FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
Warnings:

- Added the required column `commonId` to the `Discussion` table without a default value. This is not possible if the table is not empty.

*/
-- AlterTable
ALTER TABLE "Discussion"
ADD COLUMN "commonId" TEXT NOT NULL,
ADD COLUMN "proposalId" TEXT;

-- AddForeignKey
ALTER TABLE "Discussion"
ADD FOREIGN KEY ("commonId") REFERENCES "Common" ("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "Discussion"
ADD FOREIGN KEY ("proposalId") REFERENCES "Proposal" ("id") ON DELETE SET NULL ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
Warnings:

- Added the required column `userId` to the `Discussion` table without a default value. This is not possible if the table is not empty.

*/
-- AlterTable
ALTER TABLE "Discussion"
ADD COLUMN "userId" TEXT NOT NULL;

-- AddForeignKey
ALTER TABLE "Discussion"
ADD FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-- AlterEnum
-- This migration adds more than one value to an enum.
-- With PostgreSQL versions 11 and earlier, this is not possible
-- in a single migration. This can be worked around by creating
-- multiple migrations, each migration adding only one value to
-- the enum.


ALTER TYPE "EventType" ADD VALUE 'DiscussionCreated';
ALTER TYPE "EventType" ADD VALUE 'DiscussionMessageCreated';
ALTER TYPE "EventType" ADD VALUE 'DiscussionSubscriptionCreated';
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/*
Warnings:

- Added the required column `type` to the `Discussion` table without a default value. This is not possible if the table is not empty.

*/
-- AlterTable
ALTER TABLE "Discussion" ADD COLUMN "type" "DiscussionType" NOT NULL;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "EventType" ADD VALUE 'DiscussionSubscriptionTypeChanged';
107 changes: 107 additions & 0 deletions packages/core/prisma/models/all.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
model Payment {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

processed Boolean @default(false)
processedError Boolean @default(false)

type PaymentType
status PaymentStatus @default(NotAttempted)

circlePaymentStatus PaymentCircleStatus?
circlePaymentId String?

amount Int

card Card @relation(fields: [cardId], references: [id])

user User @relation(fields: [userId], references: [id])
common Common @relation(fields: [commonId], references: [id])

join JoinProposal @relation(fields: [joinId], references: [id])
subscription Subscription? @relation(fields: [subscriptionId], references: [id])

subscriptionId String?
joinId String

userId String
commonId String

cardId String
}

enum PaymentType {
OneTimePayment

SubscriptionInitialPayment
SubscriptionSequentialPayment
}

enum PaymentCircleStatus {
pending
failed
confirmed
paid
}

enum PaymentStatus {
NotAttempted
Pending
Successful
Unsuccessful
}

model Card {
id String @id @default(uuid())

circleCardId String

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

digits String
network CardNetwork

cvvCheck String
avsCheck String


user User @relation(fields: [userId], references: [id])
payments Payment[]

proposal JoinProposal[]
subscriptions Subscription[]

billingDetails CardBillingDetail?

userId String
}

enum CardNetwork {
VISA
MASTERCARD
}

model CardBillingDetail {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

name String

line1 String
line2 String?

city String
country String
district String?
postalCode String

card Card @relation(fields: [cardId], references: [id])

cardId String
}

27 changes: 27 additions & 0 deletions packages/core/prisma/models/commons/Common.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
model Common {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

name String

balance Int @default(0)
raised Int @default(0)

whitelisted Boolean @default(false)

fundingType FundingType
fundingMinimumAmount Int

events Event[]
members CommonMember[]

payments Payment[]
subscriptions Subscription[]

proposals Proposal[]
discussions Discussion[]
}


20 changes: 20 additions & 0 deletions packages/core/prisma/models/commons/CommonMember.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
model CommonMember {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

common Common @relation(fields: [commonId], references: [id])
user User @relation(fields: [userId], references: [id])

roles CommonMemberRole[]

proposals Proposal[]

commonId String
userId String

Vote Vote[]

@@unique([userId, commonId])
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
enum CommonMemberRole {
Founder
}
20 changes: 20 additions & 0 deletions packages/core/prisma/models/discussions/Discussion.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
model Discussion {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

type DiscussionType

topic String
description String

latestMessage DateTime @default(now())

user User
common Common
proposal Proposal?

messages DiscussionMessage[]
subscriptions DiscussionSubscription[]
}
15 changes: 15 additions & 0 deletions packages/core/prisma/models/discussions/DiscussionMessage.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
model DiscussionMessage {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

type DiscussionMessageType @default(Message)
message String

discussion Discussion @relation(fields: [discussionId], references: [id])
user User @relation(fields: [userId], references: [id])

discussionId String
userId String
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
model DiscussionSubscription {
id String @id @default(uuid())

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

type DiscussionSubscriptionType @default(AllNotifications)

userId String
discussionId String

user User @relation(fields: [userId], references: [id])
discussion Discussion @relation(fields: [discussionId], references: [id])
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
enum DiscussionMessageType {
Message
}
Loading