Skip to content

Commit 4e234ea

Browse files
committed
refactor: refactor the stuff, update database
1 parent 60907a8 commit 4e234ea

File tree

8 files changed

+54
-59
lines changed

8 files changed

+54
-59
lines changed

changelog.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
### 1.0.0
2+
23
- Initial project structure and repo setup
3-
- Initial API's for User, Wallet, and Transaction management
4+
- Initial API's for User, Wallet, and Transaction management

prisma/schema.prisma

+9-11
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,33 @@ datasource db {
77
url = env("DATABASE_URL")
88
}
99

10-
model User {
10+
model Wallet {
1111
id Int @id @default(autoincrement())
1212
username String @unique
1313
email String @unique
1414
application_user_id String @unique
15-
Wallet Wallet[]
16-
Transaction Transaction[]
1715
created_at DateTime @default(now())
1816
updated_at DateTime @updatedAt
17+
Transaction Transaction[]
1918
}
2019

21-
model Wallet {
20+
model Coin {
2221
id Int @id @default(autoincrement())
23-
user_id Int
24-
user User @relation(fields: [user_id], references: [id])
25-
balance Int
26-
Transaction Transaction[]
22+
name String
23+
symbol String
2724
created_at DateTime @default(now())
2825
updated_at DateTime @updatedAt
26+
Transaction Transaction[]
2927
}
3028

3129
model Transaction {
3230
id Int @id @default(autoincrement())
3331
transaction_type String
34-
user_id Int
35-
user User @relation(fields: [user_id], references: [id])
3632
wallet_id Int
37-
wallet Wallet @relation(fields: [wallet_id], references: [id])
33+
coin_id Int
3834
amount Int
3935
created_at DateTime @default(now())
4036
updated_at DateTime @updatedAt
37+
wallet Wallet @relation(fields: [wallet_id], references: [id])
38+
coin Coin @relation(fields: [coin_id], references: [id])
4139
}

src/v1/routes.ts

+28-18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { middlewareValidateYupSchemaAgainstReqBody, validateUserExistsSentThroughReqBody } from "../utils/middlewares";
2-
import { createUserSchema, updateUserSchema } from "./user.validation";
3-
import { createUser, getUserBalance, updateUser } from "./user";
2+
import { createWalletSchema, updateWalletSchema } from "./wallet/wallet.validation";
3+
import { createWallet, updateWallet, getWalletBalance } from "./wallet/wallet";
44

55
import express from "express";
66
import {
@@ -10,11 +10,32 @@ import {
1010
getTransactions,
1111
getTransactionsByUser,
1212
updateTransaction,
13-
} from "./transaction";
14-
import { createTransactionSchema, updateTransactionSchema } from "./transaction.validation";
13+
} from "./transactions/transaction";
14+
import { createTransactionSchema, updateTransactionSchema } from "./transactions/transaction.validation";
1515

1616
const v1Routes = express.Router();
1717

18+
/**
19+
* Wallet Apis Start
20+
*/
21+
22+
v1Routes.post("/createWallet", middlewareValidateYupSchemaAgainstReqBody(createWalletSchema), createWallet);
23+
v1Routes.put(
24+
"/updateWallet",
25+
validateUserExistsSentThroughReqBody("body.id"),
26+
middlewareValidateYupSchemaAgainstReqBody(updateWalletSchema),
27+
updateWallet,
28+
);
29+
v1Routes.get("/getWalletBalance", validateUserExistsSentThroughReqBody("body.input.id"), getWalletBalance);
30+
31+
/**
32+
* Wallet Apis End
33+
*/
34+
35+
/**
36+
* Transaction Apis Start
37+
* */
38+
1839
v1Routes.post(
1940
"/createTransaction",
2041
validateUserExistsSentThroughReqBody("body.user_id"),
@@ -40,19 +61,8 @@ v1Routes.get(
4061
validateUserExistsSentThroughReqBody("params.userId"),
4162
getTransactionsByUser,
4263
);
64+
/**
65+
* Transaction Apis End
66+
*/
4367

44-
v1Routes.post("/createWallet", function (req, res) {
45-
res.status(200).json({
46-
message: "createWallet",
47-
});
48-
});
49-
50-
v1Routes.post("/createUser", middlewareValidateYupSchemaAgainstReqBody(createUserSchema), createUser);
51-
v1Routes.put(
52-
"/updateUser",
53-
validateUserExistsSentThroughReqBody("body.id"),
54-
middlewareValidateYupSchemaAgainstReqBody(updateUserSchema),
55-
updateUser,
56-
);
57-
v1Routes.get("/getUserBalance", validateUserExistsSentThroughReqBody("body.input.id"), getUserBalance);
5868
export default v1Routes;

src/v1/transaction.ts renamed to src/v1/transactions/transaction.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import prisma from "./../database/prisma";
1+
import prisma from "../../database/prisma";
22
import { Response, Request } from "express";
3-
import { generateError } from "../utils/errors";
3+
import { generateError } from "../../utils/errors";
44

55
export const createTransaction = async (req: Request, res: Response) => {
66
try {
@@ -14,12 +14,7 @@ export const createTransaction = async (req: Request, res: Response) => {
1414

1515
// Create transaction
1616
let response = await prisma.transaction.create({
17-
data: {
18-
transaction_type: req.body.input.transaction_type,
19-
user_id: req.body.input.user_id,
20-
wallet_id: req.body.input.wallet_id,
21-
amount: req.body.input.amount,
22-
},
17+
data: req.body.input,
2318
});
2419

2520
res.status(200).json({

src/v1/transaction.validation.ts renamed to src/v1/transactions/transaction.validation.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ export const createTransactionSchema = object({
44
transaction_type: string()
55
.required("Transaction type is required")
66
.oneOf(["credit", "debit"], "Transaction type must be either credit or debit"),
7-
user_id: number()
8-
.required("User ID is required")
9-
.positive("User ID must be a positive integer")
10-
.integer("User ID must be an integer"),
117
wallet_id: number()
128
.required("Wallet ID is required")
139
.positive("Wallet ID must be a positive integer")
@@ -26,8 +22,8 @@ export const createTransactionSchema = object({
2622
export type CreateTransactionSchema = InferType<typeof createTransactionSchema>;
2723

2824
export const updateTransactionSchema = object({
25+
id: number().required("ID is required"),
2926
transaction_type: string().optional().oneOf(["credit", "debit"], "Transaction type must be either credit or debit"),
30-
user_id: number().optional().positive("User ID must be a positive integer").integer("User ID must be an integer"),
3127
amount: number().optional().positive("Amount must be a positive integer").integer("Amount must be an integer"),
3228
});
3329
export type UpdateTransactionSchema = InferType<typeof updateTransactionSchema>;

src/v1/wallet.ts

-1
This file was deleted.

src/v1/user.ts renamed to src/v1/wallet/wallet.ts

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import prisma from "./../database/prisma";
1+
import prisma from "../../database/prisma";
22
import { Response, Request } from "express";
3-
import { generateError } from "../utils/errors";
3+
import { generateError } from "../../utils/errors";
44

5-
export const createUser = async (req: Request, res: Response) => {
5+
export const createWallet = async (req: Request, res: Response) => {
66
try {
77
let response = await prisma.user.create({
8-
data: {
9-
email: req.body.email,
10-
username: req.body.username,
11-
application_user_id: req.body.application_user_id,
12-
},
8+
data: req.body.input,
139
});
1410
res.status(200).json({
1511
message: "User created successfully",
@@ -20,7 +16,7 @@ export const createUser = async (req: Request, res: Response) => {
2016
}
2117
};
2218

23-
export const updateUser = async (req: Request, res: Response) => {
19+
export const updateWallet = async (req: Request, res: Response) => {
2420
try {
2521
const user = req.CurrentRequestUser;
2622
const update = await prisma.user.update({
@@ -38,8 +34,8 @@ export const updateUser = async (req: Request, res: Response) => {
3834
}
3935
};
4036

41-
export const getUserBalance = (req: Request, res: Response) => {
37+
export const getWalletBalance = (req: Request, res: Response) => {
4238
res.status(200).json({
43-
message: "getUserBalance",
39+
message: "getWalletBalance",
4440
});
4541
};
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { object, string, number, InferType } from "yup";
22

3-
export const createUserSchema = object({
3+
export const createWalletSchema = object({
44
username: string().required("Username is required"),
55
application_user_id: string().required("Application User ID is required"),
66
email: string().email().required("Email is required"),
77
});
8-
export type CreateUserSchema = InferType<typeof createUserSchema>;
8+
export type CreateWalletSchema = InferType<typeof createWalletSchema>;
99

10-
export const updateUserSchema = object({
10+
export const updateWalletSchema = object({
1111
id: number().required("ID is required"),
1212
username: string().required("Username is required"),
1313
application_user_id: string().required("Application User ID is required"),
1414
email: string().email().required("Email is required"),
1515
});
16-
export type UpdateUserSchema = InferType<typeof updateUserSchema>;
16+
export type UpdateWalletSchema = InferType<typeof updateWalletSchema>;

0 commit comments

Comments
 (0)