feat: adjust data type
This commit is contained in:
parent
e3dac5529f
commit
05dfe42b2e
6 changed files with 2112 additions and 4 deletions
|
|
@ -25,6 +25,7 @@
|
|||
"nodemon": "^3.1.3",
|
||||
"prettier": "^3.2.5",
|
||||
"prisma": "^5.12.1",
|
||||
"prisma-kysely": "^1.8.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.4.3"
|
||||
},
|
||||
|
|
@ -36,7 +37,9 @@
|
|||
"dotenv": "^16.4.5",
|
||||
"express": "^4.19.2",
|
||||
"fast-jwt": "^4.0.0",
|
||||
"kysely": "^0.27.3",
|
||||
"minio": "^7.1.3",
|
||||
"prisma-extension-kysely": "^2.1.0",
|
||||
"promise.any": "^2.0.6",
|
||||
"swagger-ui-express": "^5.0.0",
|
||||
"tsoa": "^6.2.0"
|
||||
|
|
|
|||
1622
pnpm-lock.yaml
generated
1622
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
459
prisma/generated/types.ts
Normal file
459
prisma/generated/types.ts
Normal file
|
|
@ -0,0 +1,459 @@
|
|||
import type { ColumnType } from "kysely";
|
||||
export type Generated<T> = T extends ColumnType<infer S, infer I, infer U>
|
||||
? ColumnType<S, I | undefined, U>
|
||||
: ColumnType<T, T | undefined, T>;
|
||||
export type Timestamp = ColumnType<Date, Date | string, Date | string>;
|
||||
|
||||
export const Status = {
|
||||
CREATED: "CREATED",
|
||||
ACTIVE: "ACTIVE",
|
||||
INACTIVE: "INACTIVE"
|
||||
} as const;
|
||||
export type Status = (typeof Status)[keyof typeof Status];
|
||||
export const UserType = {
|
||||
USER: "USER",
|
||||
MESSENGER: "MESSENGER",
|
||||
DELEGATE: "DELEGATE",
|
||||
AGENCY: "AGENCY"
|
||||
} as const;
|
||||
export type UserType = (typeof UserType)[keyof typeof UserType];
|
||||
export const CustomerType = {
|
||||
CORP: "CORP",
|
||||
PERS: "PERS"
|
||||
} as const;
|
||||
export type CustomerType = (typeof CustomerType)[keyof typeof CustomerType];
|
||||
export type Branch = {
|
||||
id: string;
|
||||
code: string;
|
||||
taxNo: string;
|
||||
name: string;
|
||||
nameEN: string;
|
||||
address: string;
|
||||
addressEN: string;
|
||||
telephoneNo: string;
|
||||
provinceId: string | null;
|
||||
districtId: string | null;
|
||||
subDistrictId: string | null;
|
||||
zipCode: string;
|
||||
email: string;
|
||||
contactName: string | null;
|
||||
lineId: string | null;
|
||||
latitude: string;
|
||||
longitude: string;
|
||||
isHeadOffice: Generated<boolean>;
|
||||
headOfficeId: string | null;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type BranchContact = {
|
||||
id: string;
|
||||
telephoneNo: string;
|
||||
branchId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type BranchUser = {
|
||||
id: string;
|
||||
branchId: string;
|
||||
userId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type Customer = {
|
||||
id: string;
|
||||
code: string;
|
||||
personName: string;
|
||||
personNameEN: string | null;
|
||||
customerType: CustomerType;
|
||||
customerName: string;
|
||||
customerNameEN: string;
|
||||
taxNo: string | null;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type CustomerBranch = {
|
||||
id: string;
|
||||
branchNo: number;
|
||||
code: string;
|
||||
legalPersonNo: string;
|
||||
name: string;
|
||||
nameEN: string;
|
||||
customerId: string;
|
||||
taxNo: string | null;
|
||||
registerName: string;
|
||||
registerDate: Timestamp;
|
||||
authorizedCapital: string;
|
||||
address: string;
|
||||
addressEN: string;
|
||||
provinceId: string | null;
|
||||
districtId: string | null;
|
||||
subDistrictId: string | null;
|
||||
zipCode: string;
|
||||
email: string;
|
||||
telephoneNo: string;
|
||||
employmentOffice: string;
|
||||
bussinessType: string;
|
||||
bussinessTypeEN: string;
|
||||
jobPosition: string;
|
||||
jobPositionEN: string;
|
||||
jobDescription: string;
|
||||
saleEmployee: string;
|
||||
payDate: Timestamp;
|
||||
wageRate: number;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type District = {
|
||||
id: string;
|
||||
name: string;
|
||||
nameEN: string;
|
||||
provinceId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type Employee = {
|
||||
id: string;
|
||||
code: string;
|
||||
nrcNo: string;
|
||||
firstName: string;
|
||||
firstNameEN: string;
|
||||
lastName: string;
|
||||
lastNameEN: string;
|
||||
dateOfBirth: Timestamp;
|
||||
gender: string;
|
||||
nationality: string;
|
||||
address: string | null;
|
||||
addressEN: string | null;
|
||||
provinceId: string | null;
|
||||
districtId: string | null;
|
||||
subDistrictId: string | null;
|
||||
zipCode: string;
|
||||
passportType: string;
|
||||
passportNumber: string;
|
||||
passportIssueDate: Timestamp;
|
||||
passportExpiryDate: Timestamp;
|
||||
passportIssuingCountry: string;
|
||||
passportIssuingPlace: string;
|
||||
previousPassportReference: string | null;
|
||||
visaType: string | null;
|
||||
visaNumber: string | null;
|
||||
visaIssueDate: Timestamp | null;
|
||||
visaExpiryDate: Timestamp | null;
|
||||
visaIssuingPlace: string | null;
|
||||
visaStayUntilDate: Timestamp | null;
|
||||
tm6Number: string | null;
|
||||
entryDate: Timestamp | null;
|
||||
workerStatus: string | null;
|
||||
customerBranchId: string | null;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type EmployeeCheckup = {
|
||||
id: string;
|
||||
employeeId: string;
|
||||
checkupResult: string | null;
|
||||
checkupType: string | null;
|
||||
provinceId: string | null;
|
||||
hospitalName: string | null;
|
||||
remark: string | null;
|
||||
medicalBenefitScheme: string | null;
|
||||
insuranceCompany: string | null;
|
||||
coverageStartDate: Timestamp | null;
|
||||
coverageExpireDate: Timestamp | null;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type EmployeeOtherInfo = {
|
||||
id: string;
|
||||
employeeId: string;
|
||||
citizenId: string | null;
|
||||
fatherBirthPlace: string | null;
|
||||
fatherFirstName: string | null;
|
||||
fatherLastName: string | null;
|
||||
motherBirthPlace: string | null;
|
||||
motherFirstName: string | null;
|
||||
motherLastName: string | null;
|
||||
fatherFirstNameEN: string | null;
|
||||
fatherLastNameEN: string | null;
|
||||
motherFirstNameEN: string | null;
|
||||
motherLastNameEN: string | null;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type EmployeeWork = {
|
||||
id: string;
|
||||
employeeId: string;
|
||||
ownerName: string | null;
|
||||
positionName: string | null;
|
||||
jobType: string | null;
|
||||
workplace: string | null;
|
||||
workPermitNo: string | null;
|
||||
workPermitIssuDate: Timestamp | null;
|
||||
workPermitExpireDate: Timestamp | null;
|
||||
workEndDate: Timestamp | null;
|
||||
remark: string | null;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type Menu = {
|
||||
id: string;
|
||||
caption: string;
|
||||
captionEN: string;
|
||||
menuType: string;
|
||||
url: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
parentId: string | null;
|
||||
};
|
||||
export type MenuComponent = {
|
||||
id: string;
|
||||
componentId: string;
|
||||
componentTag: string;
|
||||
menuId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type Product = {
|
||||
id: string;
|
||||
code: string;
|
||||
name: string;
|
||||
detail: string;
|
||||
process: number;
|
||||
price: number;
|
||||
agentPrice: number;
|
||||
serviceCharge: number;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
remark: string | null;
|
||||
productTypeId: string | null;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type ProductGroup = {
|
||||
id: string;
|
||||
code: string;
|
||||
name: string;
|
||||
detail: string;
|
||||
remark: string;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type ProductType = {
|
||||
id: string;
|
||||
code: string;
|
||||
name: string;
|
||||
detail: string;
|
||||
remark: string;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
productGroupId: string;
|
||||
};
|
||||
export type Province = {
|
||||
id: string;
|
||||
name: string;
|
||||
nameEN: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type RoleMenuComponentPermission = {
|
||||
id: string;
|
||||
userRole: string;
|
||||
permission: string;
|
||||
menuComponentId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type RoleMenuPermission = {
|
||||
id: string;
|
||||
userRole: string;
|
||||
permission: string;
|
||||
menuId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type RunningNo = {
|
||||
key: string;
|
||||
value: number;
|
||||
};
|
||||
export type Service = {
|
||||
id: string;
|
||||
code: string;
|
||||
name: string;
|
||||
detail: string;
|
||||
attributes: unknown | null;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type SubDistrict = {
|
||||
id: string;
|
||||
name: string;
|
||||
nameEN: string;
|
||||
zipCode: string;
|
||||
districtId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type User = {
|
||||
id: string;
|
||||
code: string | null;
|
||||
firstName: string;
|
||||
firstNameEN: string;
|
||||
lastName: string;
|
||||
lastNameEN: string;
|
||||
username: string;
|
||||
gender: string;
|
||||
address: string;
|
||||
addressEN: string;
|
||||
provinceId: string | null;
|
||||
districtId: string | null;
|
||||
subDistrictId: string | null;
|
||||
zipCode: string;
|
||||
email: string;
|
||||
telephoneNo: string;
|
||||
registrationNo: string | null;
|
||||
startDate: Timestamp | null;
|
||||
retireDate: Timestamp | null;
|
||||
checkpoint: string | null;
|
||||
checkpointEN: string | null;
|
||||
userType: UserType;
|
||||
userRole: string;
|
||||
discountCondition: string | null;
|
||||
licenseNo: string | null;
|
||||
licenseIssueDate: Timestamp | null;
|
||||
licenseExpireDate: Timestamp | null;
|
||||
sourceNationality: string | null;
|
||||
importNationality: string | null;
|
||||
trainingPlace: string | null;
|
||||
responsibleArea: string | null;
|
||||
birthDate: Timestamp | null;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type UserMenuComponentPermission = {
|
||||
id: string;
|
||||
userId: string;
|
||||
menuComponentId: string;
|
||||
permission: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type UserMenuPermission = {
|
||||
id: string;
|
||||
permission: string;
|
||||
menuId: string;
|
||||
userId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type Work = {
|
||||
id: string;
|
||||
order: number;
|
||||
name: string;
|
||||
attributes: unknown | null;
|
||||
status: Generated<Status>;
|
||||
statusOrder: Generated<number>;
|
||||
serviceId: string | null;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type WorkProduct = {
|
||||
order: number;
|
||||
workId: string;
|
||||
productId: string;
|
||||
createdBy: string | null;
|
||||
createdAt: Generated<Timestamp>;
|
||||
updateBy: string | null;
|
||||
updatedAt: Timestamp;
|
||||
};
|
||||
export type DB = {
|
||||
Branch: Branch;
|
||||
BranchContact: BranchContact;
|
||||
BranchUser: BranchUser;
|
||||
Customer: Customer;
|
||||
CustomerBranch: CustomerBranch;
|
||||
District: District;
|
||||
Employee: Employee;
|
||||
EmployeeCheckup: EmployeeCheckup;
|
||||
EmployeeOtherInfo: EmployeeOtherInfo;
|
||||
EmployeeWork: EmployeeWork;
|
||||
Menu: Menu;
|
||||
MenuComponent: MenuComponent;
|
||||
Product: Product;
|
||||
ProductGroup: ProductGroup;
|
||||
ProductType: ProductType;
|
||||
Province: Province;
|
||||
RoleMenuComponentPermission: RoleMenuComponentPermission;
|
||||
RoleMenuPermission: RoleMenuPermission;
|
||||
RunningNo: RunningNo;
|
||||
Service: Service;
|
||||
SubDistrict: SubDistrict;
|
||||
User: User;
|
||||
UserMenuComponentPermission: UserMenuComponentPermission;
|
||||
UserMenuPermission: UserMenuPermission;
|
||||
Work: Work;
|
||||
WorkProduct: WorkProduct;
|
||||
};
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
-- AlterTable
|
||||
ALTER TABLE "Product" ALTER COLUMN "price" SET DATA TYPE DOUBLE PRECISION,
|
||||
ALTER COLUMN "agentPrice" SET DATA TYPE DOUBLE PRECISION,
|
||||
ALTER COLUMN "serviceCharge" SET DATA TYPE DOUBLE PRECISION;
|
||||
|
|
@ -2,6 +2,10 @@ generator client {
|
|||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
generator kysely {
|
||||
provider = "prisma-kysely"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
|
|
@ -644,9 +648,9 @@ model Product {
|
|||
name String
|
||||
detail String
|
||||
process Int
|
||||
price Int
|
||||
agentPrice Int
|
||||
serviceCharge Int
|
||||
price Float
|
||||
agentPrice Float
|
||||
serviceCharge Float
|
||||
|
||||
status Status @default(CREATED)
|
||||
statusOrder Int @default(0)
|
||||
|
|
|
|||
18
src/db.ts
18
src/db.ts
|
|
@ -1,7 +1,23 @@
|
|||
import { PrismaClient } from "@prisma/client";
|
||||
import kyselyExtension from "prisma-extension-kysely";
|
||||
import type { DB } from "../prisma/generated/types.ts";
|
||||
import { Kysely, PostgresAdapter, PostgresIntrospector, PostgresQueryCompiler } from "kysely";
|
||||
|
||||
const prisma = new PrismaClient({
|
||||
errorFormat: process.env.NODE_ENV === "production" ? "minimal" : "pretty",
|
||||
});
|
||||
}).$extends(
|
||||
kyselyExtension({
|
||||
kysely: (driver) =>
|
||||
new Kysely<DB>({
|
||||
dialect: {
|
||||
createDriver: () => driver,
|
||||
createAdapter: () => new PostgresAdapter(),
|
||||
createIntrospector: (db: Kysely<DB>) => new PostgresIntrospector(db),
|
||||
createQueryCompiler: () => new PostgresQueryCompiler(),
|
||||
},
|
||||
plugins: [],
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
export default prisma;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue