diff --git a/Prisma/api/middleware/.env.example b/Prisma/api/middleware/.env.example deleted file mode 100644 index 565e3e4a..00000000 --- a/Prisma/api/middleware/.env.example +++ /dev/null @@ -1,7 +0,0 @@ -DATABASE_URL= - -JWT_SECRET= - -PI_API_KEY= - -PI_API_SECRET= diff --git a/Prisma/api/middleware/auth.middleware.ts b/Prisma/api/middleware/auth.middleware.ts deleted file mode 100644 index 9707fc96..00000000 --- a/Prisma/api/middleware/auth.middleware.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Request,Response,NextFunction } from "express"; - -export function authMiddleware( -req:Request, -res:Response, -next:NextFunction -){ - -next(); - -} diff --git a/Prisma/schema.prisma b/Prisma/schema.prisma deleted file mode 100644 index 85b2ee20..00000000 --- a/Prisma/schema.prisma +++ /dev/null @@ -1,121 +0,0 @@ -model User { - id String @id @default(cuid()) - email String @unique - phone String? @unique - password String - name String - role Role @default(USER) -user -employer -investor -teacher -farmer -business -admin -super_admin - - mojadId MojadID? - wallet Wallet? - - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - -model MojadID { - id String @id @default(cuid()) - userId String @unique - username String @unique - reputation Int @default(0) - trustScore Int @default(0) - - user User @relation(fields: [userId], references: [id]) -} - -model Wallet { - id String @id @default(cuid()) - userId String @unique - balance Float @default(0) - - currency String @default("PI") // π only - - user User @relation(fields: [userId], references: [id]) -} - -enum Role { - USER - ADMIN - BUSINESS - INVESTOR -} -model Company { - id String @id @default(cuid()) - name String - description String? - industry String? - website String? - - ownerId String - owner User @relation(fields: [ownerId], references: [id]) - - jobs Job[] - - createdAt DateTime @default(now()) -}model Job { - id String @id @default(cuid()) - title String - description String - salary Float? - currency String @default("PI") - - companyId String - company Company @relation(fields: [companyId], references: [id]) - - applications Application[] - - createdAt DateTime @default(now()) -} -model Application { - id String @id @default(cuid()) - userId String - jobId String - - status String @default("pending") - - user User @relation(fields: [userId], references: [id]) - job Job @relation(fields: [jobId], references: [id]) - - createdAt DateTime @default(now()) -} - -model Transaction { - id String @id @default(cuid()) - fromUserId String? - toUserId String? - amount Float - currency String @default("PI") - - type String // payment | escrow | reward | refund - status String @default("pending") - - createdAt DateTime @default(now()) -} -model Escrow { - id String @id @default(cuid()) - jobId String? - senderId String - receiverId String? - - amount Float - currency String @default("PI") - - status String @default("held") // held | released | disputed - - createdAt DateTime @default(now()) -} -model PaymentLog { - id String @id @default(cuid()) - transactionId String - message String - - createdAt DateTime @default(now()) -} diff --git a/Prisma/services/payment-service/api/v1/payments/payment.routes.ts b/Prisma/services/payment-service/api/v1/payments/payment.routes.ts deleted file mode 100644 index a9a2cce1..00000000 --- a/Prisma/services/payment-service/api/v1/payments/payment.routes.ts +++ /dev/null @@ -1,31 +0,0 @@ -import express from "express"; -import { PaymentService } from "../../../services/payment-service/payment.service"; - -const router = express.Router(); -const payment = new PaymentService(); - -router.post("/send", (req, res) => { - const { fromUserId, toUserId, amount } = req.body; - - const result = payment.sendPayment(fromUserId, toUserId, amount); - - res.json(result); -}); - -router.post("/escrow", (req, res) => { - const { senderId, receiverId, amount, jobId } = req.body; - - const escrow = payment.createEscrow(senderId, receiverId, amount, jobId); - - res.json(escrow); -}); - -router.post("/release", (req, res) => { - const { escrowId } = req.body; - - const result = payment.releaseEscrow(escrowId); - - res.json(result); -}); - -export default router; diff --git a/Prisma/services/payment-service/payment.service.ts b/Prisma/services/payment-service/payment.service.ts deleted file mode 100644 index 4b971667..00000000 --- a/Prisma/services/payment-service/payment.service.ts +++ /dev/null @@ -1,33 +0,0 @@ -export class PaymentService { - - sendPayment(fromUserId: string, toUserId: string, amount: number) { - return { - id: Date.now().toString(), - fromUserId, - toUserId, - amount, - currency: "PI", - status: "completed", - type: "payment" - }; - } - - createEscrow(senderId: string, receiverId: string, amount: number, jobId?: string) { - return { - id: Date.now().toString(), - senderId, - receiverId, - jobId, - amount, - currency: "PI", - status: "held" - }; - } - - releaseEscrow(escrowId: string) { - return { - escrowId, - status: "released" - }; - } -} diff --git a/core/ai-engine/core/brain/mojad-brain.engine.ts b/core/ai-engine/core/brain/mojad-brain.engine.ts new file mode 100644 index 00000000..62d2bce9 --- /dev/null +++ b/core/ai-engine/core/brain/mojad-brain.engine.ts @@ -0,0 +1,7 @@ +if(event.type === "SEARCH_QUERY"){ + +return { +action:"RUN_SEARCH_ENGINE" +}; + +} diff --git a/core/reputation-engine/trust.engine.ts b/core/reputation-engine/trust.engine.ts new file mode 100644 index 00000000..c1f25413 --- /dev/null +++ b/core/reputation-engine/trust.engine.ts @@ -0,0 +1,28 @@ +export class TrustEngine { + +calculateTrust(user:any){ + +return { +score:50, +level:"new" +}; + +} + +increaseTrust(userId:string,value:number){ + +return { +updated:true +}; + +} + +decreaseTrust(userId:string,value:number){ + +return { +updated:true +}; + +} + +} diff --git a/prisma/core/core/search-engine/discovery.engine.ts b/prisma/core/core/search-engine/discovery.engine.ts new file mode 100644 index 00000000..781d7c8f --- /dev/null +++ b/prisma/core/core/search-engine/discovery.engine.ts @@ -0,0 +1,11 @@ +export class DiscoveryEngine { + +recommend(userId:string){ + +return { +recommended:[] +}; + +} + +} diff --git a/prisma/core/core/search-engine/services/search-service/api/v1/search/search.routes.ts b/prisma/core/core/search-engine/services/search-service/api/v1/search/search.routes.ts new file mode 100644 index 00000000..d16e2bdf --- /dev/null +++ b/prisma/core/core/search-engine/services/search-service/api/v1/search/search.routes.ts @@ -0,0 +1,14 @@ +import express from "express"; + +const router = express.Router(); + +router.get("/",(req,res)=>{ + +res.json({ +success:true, +results:[] +}); + +}); + +export default router; diff --git a/prisma/core/core/search-engine/services/search-service/search.service.ts b/prisma/core/core/search-engine/services/search-service/search.service.ts new file mode 100644 index 00000000..83c18475 --- /dev/null +++ b/prisma/core/core/search-engine/services/search-service/search.service.ts @@ -0,0 +1,13 @@ +import { SearchEngine } from "../../core/search-engine/search.engine"; + +const search = new SearchEngine(); + +export class SearchService { + +find(query:string){ + +return search.search(query); + +} + +} diff --git a/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/core/streaming-engine/core/brain/mojad-brain.engine.ts b/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/core/streaming-engine/core/brain/mojad-brain.engine.ts new file mode 100644 index 00000000..adbd4e71 --- /dev/null +++ b/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/core/streaming-engine/core/brain/mojad-brain.engine.ts @@ -0,0 +1,11 @@ +import { EventStreamEngine } from "../streaming-engine/event-stream.engine"; + +private stream = new EventStreamEngine(); + +handleEvent(event:any){ + +this.stream.publish(event); + +return this.process(event); + + } diff --git a/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/core/streaming-engine/event-consumer.ts b/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/core/streaming-engine/event-consumer.ts new file mode 100644 index 00000000..89cf8f4f --- /dev/null +++ b/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/core/streaming-engine/event-consumer.ts @@ -0,0 +1,11 @@ +export class EventConsumer { + +consume(event:any){ + +console.log("Processing:",event.type); + +return true; + +} + +} diff --git a/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/topics.ts b/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/topics.ts new file mode 100644 index 00000000..3d50666f --- /dev/null +++ b/prisma/core/data-engine/core/data-engine/core/streaming-engine/core/streaming-engine/topics.ts @@ -0,0 +1,19 @@ +export const Topics = { + +JOB_CREATED:"JOB_CREATED", + +JOB_APPLIED:"JOB_APPLIED", + +MESSAGE_SENT:"MESSAGE_SENT", + +PAYMENT_CREATED:"PAYMENT_CREATED", + +PAYMENT_RELEASED:"PAYMENT_RELEASED", + +USER_REGISTERED:"USER_REGISTERED", + +INVESTMENT_CREATED:"INVESTMENT_CREATED", + +NOTIFICATION_CREATED:"NOTIFICATION_CREATED" + +}; diff --git a/prisma/core/data-engine/core/data-engine/core/streaming-engine/event-stream.engine.ts b/prisma/core/data-engine/core/data-engine/core/streaming-engine/event-stream.engine.ts new file mode 100644 index 00000000..89c7ecce --- /dev/null +++ b/prisma/core/data-engine/core/data-engine/core/streaming-engine/event-stream.engine.ts @@ -0,0 +1,33 @@ +export interface MojadEvent { + +id:string; + +type:string; + +payload:any; + +timestamp:Date; + +} + +export class EventStreamEngine { + +publish(event:MojadEvent){ + +return { +status:"published", +event +}; + +} + +subscribe(topic:string){ + +return { +status:"subscribed", +topic +}; + +} + +} diff --git a/prisma/core/data-engine/core/data-engine/data-intelligence.engine.ts b/prisma/core/data-engine/core/data-engine/data-intelligence.engine.ts new file mode 100644 index 00000000..b7f2caa7 --- /dev/null +++ b/prisma/core/data-engine/core/data-engine/data-intelligence.engine.ts @@ -0,0 +1,28 @@ +export class DataIntelligence { + +analyzeUserBehavior(){ + +return { +pattern:"active_user", +score:0.8 +}; + +} + +improveMatching(){ + +return { +accuracy:0.85 +}; + +} + +improveModeration(){ + +return { +precision:0.9 +}; + +} + +} diff --git a/prisma/core/data-engine/data-collector.engine.ts b/prisma/core/data-engine/data-collector.engine.ts new file mode 100644 index 00000000..b343ba95 --- /dev/null +++ b/prisma/core/data-engine/data-collector.engine.ts @@ -0,0 +1,21 @@ +export class DataCollector { + +logUserActivity(userId:string,action:string){ + +return { +stored:true, +userId, +action +}; + +} + +storeAITrainingData(input:any,output:any){ + +return { +saved:true +}; + +} + +} diff --git a/prisma/core/identity-engine/core/identity-engine/api/v1/auth/auth.routes.ts b/prisma/core/identity-engine/core/identity-engine/api/v1/auth/auth.routes.ts new file mode 100644 index 00000000..24a9b741 --- /dev/null +++ b/prisma/core/identity-engine/core/identity-engine/api/v1/auth/auth.routes.ts @@ -0,0 +1,22 @@ +import express from "express"; + +const router = express.Router(); + +router.post("/register",(req,res)=>{ + +res.json({ +mojadId:"MOJAD-XXXX", +status:"created" +}); + +}); + +router.post("/verify",(req,res)=>{ + +res.json({ +status:"verified" +}); + +}); + +export default router; diff --git a/prisma/core/identity-engine/core/identity-engine/verification.engine.ts b/prisma/core/identity-engine/core/identity-engine/verification.engine.ts new file mode 100644 index 00000000..f480e2c0 --- /dev/null +++ b/prisma/core/identity-engine/core/identity-engine/verification.engine.ts @@ -0,0 +1,27 @@ +export class VerificationEngine { + +verifyEmail(){ + +return { +status:"verified" +}; + +} + +verifyPhone(){ + +return { +status:"verified" +}; + +} + +kycCheck(){ + +return { +status:"pending_review" +}; + +} + +} diff --git a/prisma/core/identity-engine/mojad-id.engine.ts b/prisma/core/identity-engine/mojad-id.engine.ts new file mode 100644 index 00000000..9d9f362d --- /dev/null +++ b/prisma/core/identity-engine/mojad-id.engine.ts @@ -0,0 +1,9 @@ +export class MojadIDEngine { + +generateID(name:string){ + +return "MOJAD-" + Math.random().toString(36).substring(2,10).toUpperCase(); + +} + +} diff --git a/prisma/core/moderation-engine/safety.engine.ts b/prisma/core/moderation-engine/safety.engine.ts new file mode 100644 index 00000000..bd07d608 --- /dev/null +++ b/prisma/core/moderation-engine/safety.engine.ts @@ -0,0 +1,28 @@ +export class SafetyEngine { + +analyze(content:any){ + +return { +riskScore: 0.2, +status: "allowed" +}; + +} + +detectScam(content:any){ + +return { +scam: false +}; + +} + +detectSpam(content:any){ + +return { +spam: false +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/moderation.pipeline.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/moderation.pipeline.ts new file mode 100644 index 00000000..994d744e --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/moderation.pipeline.ts @@ -0,0 +1,35 @@ +import { SafetyEngine } from "./safety.engine"; + +export class ModerationPipeline { + +private safety = new SafetyEngine(); + +process(input:any){ + +const analysis = this.safety.analyze(input); + +if(analysis.riskScore > 0.7){ + +return { +status:"blocked", +reason:"High risk content" +}; + +} + +if(analysis.riskScore > 0.3){ + +return { +status:"flagged", +reason:"Needs review" +}; + +} + +return { +status:"allowed" +}; + +} + + } diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/feed.service.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/feed.service.ts new file mode 100644 index 00000000..1e24d3d4 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/feed.service.ts @@ -0,0 +1,24 @@ +import { ModerationPipeline } from "../../core/moderation-engine/moderation.pipeline"; + +const moderation = new ModerationPipeline(); + +export class FeedService { + +createPost(post:any){ + +const result = moderation.process(post); + +if(result.status !== "allowed"){ + +return result; + +} + +return { +success:true, +post +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/chat.service.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/chat.service.ts new file mode 100644 index 00000000..178c42f7 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/chat.service.ts @@ -0,0 +1,26 @@ +import { ModerationPipeline } from "../../core/moderation-engine/moderation.pipeline"; + +const moderation = new ModerationPipeline(); + +export class ChatService { + +sendMessage(message:any){ + +const result = moderation.process(message); + +if(result.status === "blocked"){ + +return { +blocked:true +}; + +} + +return { +sent:true, +message +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/payment.guard.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/payment.guard.ts new file mode 100644 index 00000000..359466ba --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/payment.guard.ts @@ -0,0 +1,26 @@ +import { ModerationPipeline } from "../../core/moderation-engine/moderation.pipeline"; + +const moderation = new ModerationPipeline(); + +export class PaymentGuard { + +validate(transaction:any){ + +const result = moderation.process(transaction); + +if(result.status === "blocked"){ + +return { +approved:false, +reason:"Fraud risk detected" +}; + +} + +return { +approved:true +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/core/brain/core/brain/orchestrator.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/core/brain/core/brain/orchestrator.ts new file mode 100644 index 00000000..521473e1 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/core/brain/core/brain/orchestrator.ts @@ -0,0 +1,18 @@ +import { MojadBrain } from "./mojad-brain.engine"; + +export class Orchestrator { + +private brain = new MojadBrain(); + +handle(event:any){ + +const decision = this.brain.process(event); + +return { +event, +decision +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/core/brain/mojad-brain.engine.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/core/brain/mojad-brain.engine.ts new file mode 100644 index 00000000..a332579e --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/core/brain/mojad-brain.engine.ts @@ -0,0 +1,31 @@ +import { EventBus } from "./event-bus"; + +export class MojadBrain { + +private bus = new EventBus(); + +process(event:any){ + +if(event.type === "NEW_JOB"){ + +return { action:"RUN_MATCHING_ENGINE" }; + +} + +if(event.type === "NEW_MESSAGE"){ + +return { action:"RUN_MODERATION" }; + +} + +if(event.type === "NEW_PAYMENT"){ + +return { action:"RUN_FRAUD_CHECK" }; + +} + +return { action:"LOG_EVENT" }; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/event-bus.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/event-bus.ts new file mode 100644 index 00000000..4a748328 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/core/brain/event-bus.ts @@ -0,0 +1,26 @@ +type Event = { +type: string; +payload: any; +}; + +export class EventBus { + +emit(event: Event){ + +return { +status:"event_received", +event +}; + +} + +subscribe(type:string,handler:Function){ + +return { +status:"subscribed", +type +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/search.service.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/search.service.ts new file mode 100644 index 00000000..29a95037 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/core/moderation-engine/services/feed-service/services/chat-service/services/payment-service/services/search-service/search.service.ts @@ -0,0 +1,26 @@ +import { ModerationPipeline } from "../../core/moderation-engine/moderation.pipeline"; + +const moderation = new ModerationPipeline(); + +export class SearchService { + +search(query:any){ + +const result = moderation.process({ content: query }); + +if(result.status === "blocked"){ + +return { +results:[], +blocked:true +}; + +} + +return { +results:[] +}; + +} + +} diff --git a/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/moderation.routes.ts b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/moderation.routes.ts new file mode 100644 index 00000000..19ce6093 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/api/v1/moderation/moderation.routes.ts @@ -0,0 +1,14 @@ +import express from "express"; + +const router = express.Router(); + +router.post("/check",(req,res)=>{ + +res.json({ +status:"safe", +riskScore:0.1 +}); + +}); + +export default router; diff --git a/prisma/core/moderation-engine/services/moderation-service/moderation.service.ts b/prisma/core/moderation-engine/services/moderation-service/moderation.service.ts new file mode 100644 index 00000000..60b52a76 --- /dev/null +++ b/prisma/core/moderation-engine/services/moderation-service/moderation.service.ts @@ -0,0 +1,12 @@ +export class ModerationService { + +moderate(content:any){ + +return { +status:"checked", +approved:true +}; + +} + +} diff --git a/prisma/core/search-engine/search.engine.ts b/prisma/core/search-engine/search.engine.ts new file mode 100644 index 00000000..de1a4dd4 --- /dev/null +++ b/prisma/core/search-engine/search.engine.ts @@ -0,0 +1,12 @@ +export class SearchEngine { + +search(query:string){ + +return { +query, +results:[] +}; + +} + +} diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 799c4fe4..7c1bd5bc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,3 +1,133 @@ +model SearchIndex { + + id String @id @default(cuid()) + + entityType String + + entityId String + + title String + + content String + + tags String[] + + createdAt DateTime @default(now()) + +} +model SystemInsight { + + id String @id @default(cuid()) + + key String + + value Json + + updatedAt DateTime @updatedAt + +} +model AITrainingData { + + id String @id @default(cuid()) + + type String // match, moderation, ranking + + input Json + + output Json + + score Float? + + createdAt DateTime @default(now()) + +} +model UserActivityLog { + + id String @id @default(cuid()) + + userId String + + action String + + metadata Json? + + createdAt DateTime @default(now()) + +} +model ModerationLog { + + id String @id @default(cuid()) + + userId String + + contentType String // job, message, post, payment + + contentId String? + + riskScore Float @default(0) + + status String // allowed | flagged | blocked + + reason String? + + createdAt DateTime @default(now()) + +} +model Verification { + + id String @id @default(cuid()) + + userId String + + type String // email | phone | KYC + + status String @default("pending") + + createdAt DateTime @default(now()) + + verifiedAt DateTime? + +} +model MojadUser { + + id String @id @default(cuid()) + + mojadId String @unique + + email String? @unique + + phone String? @unique + + name String? + + country String? + + role String @default("user") + + verified Boolean @default(false) + + createdAt DateTime @default(now()) + +} +model Escrow { + + id String @id @default(cuid()) + + senderId String + + receiverId String + + amount Float + + currency String @default("PI") + + status String @default("pending") + + createdAt DateTime @default(now()) + + releasedAt DateTime? + +} model MeetingParticipant { id String @id @default(cuid()) @@ -429,5 +559,4 @@ model TrustProfile { verified Boolean @default(false) updatedAt DateTime @updatedAt - } diff --git a/prisma/services/payment-service/escrow.service.ts b/prisma/services/payment-service/escrow.service.ts new file mode 100644 index 00000000..bf0b55c0 --- /dev/null +++ b/prisma/services/payment-service/escrow.service.ts @@ -0,0 +1,20 @@ +export class EscrowService { + +createEscrow(senderId:string,receiverId:string,amount:number){ + +return { +status:"held", +amount +}; + +} + +releaseEscrow(escrowId:string){ + +return { +status:"released" +}; + +} + +} diff --git a/prisma/services/payment-service/services/payment-service/api/v1/payments/escrow.routes.ts b/prisma/services/payment-service/services/payment-service/api/v1/payments/escrow.routes.ts new file mode 100644 index 00000000..482caa15 --- /dev/null +++ b/prisma/services/payment-service/services/payment-service/api/v1/payments/escrow.routes.ts @@ -0,0 +1,21 @@ +import express from "express"; + +const router = express.Router(); + +router.post("/create",(req,res)=>{ + +res.json({ +status:"escrow created" +}); + +}); + +router.post("/release",(req,res)=>{ + +res.json({ +status:"escrow released" +}); + +}); + +export default router; diff --git a/prisma/services/payment-service/services/payment-service/payment.service.ts b/prisma/services/payment-service/services/payment-service/payment.service.ts new file mode 100644 index 00000000..28b31e3a --- /dev/null +++ b/prisma/services/payment-service/services/payment-service/payment.service.ts @@ -0,0 +1,19 @@ +export class PaymentService { + +sendPayment(){ + +return { +status:"sent" +}; + +} + +receivePayment(){ + +return { +status:"received" +}; + +} + +}