Skip to content

Commit df0fb2b

Browse files
authored
Merge pull request #254 from fairnesscoop/feat/add-user-savings-record-model
Add UserSavingsRecord model
2 parents 9166c6c + 5ecc010 commit df0fb2b

File tree

4 files changed

+96
-1
lines changed

4 files changed

+96
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {MigrationInterface, QueryRunner} from "typeorm";
2+
3+
export class UserSavingsRecord1650636333167 implements MigrationInterface {
4+
name = 'UserSavingsRecord1650636333167'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`CREATE TYPE "user_savings_record_type_enum" AS ENUM('input', 'output')`);
8+
await queryRunner.query(`CREATE TABLE "user_savings_record" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "amount" integer NOT NULL, "type" "user_savings_record_type_enum" NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "userId" uuid NOT NULL, CONSTRAINT "PK_f5f68a0ad3332f08e8adc70a4c6" PRIMARY KEY ("id")); COMMENT ON COLUMN "user_savings_record"."amount" IS 'Stored in base 100'`);
9+
await queryRunner.query(`ALTER TABLE "user_savings_record" ADD CONSTRAINT "FK_b126b5220c39f0c684fd3929eac" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
10+
}
11+
12+
public async down(queryRunner: QueryRunner): Promise<void> {
13+
await queryRunner.query(`ALTER TABLE "user_savings_record" DROP CONSTRAINT "FK_b126b5220c39f0c684fd3929eac"`);
14+
await queryRunner.query(`DROP TABLE "user_savings_record"`);
15+
await queryRunner.query(`DROP TYPE "user_savings_record_type_enum"`);
16+
}
17+
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { mock, instance } from 'ts-mockito';
2+
import { User } from '../User/User.entity';
3+
import { SavingsRecordType, UserSavingsRecord } from './UserSavingsRecord.entity';
4+
5+
describe('UserSavingsRecord.entity', () => {
6+
it('testGetters', () => {
7+
const user = mock(User);
8+
const userSavingsRecord = new UserSavingsRecord(
9+
100000,
10+
SavingsRecordType.INPUT,
11+
instance(user)
12+
);
13+
14+
expect(userSavingsRecord.getId()).toBe(undefined);
15+
expect(userSavingsRecord.getAmount()).toBe(100000);
16+
expect(userSavingsRecord.getUser()).toBe(instance(user));
17+
expect(userSavingsRecord.getType()).toBe(SavingsRecordType.INPUT);
18+
});
19+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {
2+
Entity,
3+
Column,
4+
PrimaryGeneratedColumn,
5+
ManyToOne
6+
} from 'typeorm';
7+
import { User } from '../User/User.entity';
8+
9+
export enum SavingsRecordType {
10+
INPUT = 'input',
11+
OUTPUT = 'output'
12+
}
13+
14+
@Entity()
15+
export class UserSavingsRecord {
16+
@PrimaryGeneratedColumn('uuid')
17+
private id: string;
18+
19+
@Column({ type: 'integer', nullable: false, comment: 'Stored in base 100' })
20+
private amount: number;
21+
22+
@Column('enum', { enum: SavingsRecordType, nullable: false })
23+
private type: SavingsRecordType;
24+
25+
@ManyToOne(type => User, { nullable: false, onDelete: 'CASCADE' })
26+
private user: User;
27+
28+
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
29+
private createdAt: Date;
30+
31+
constructor(
32+
amount: number,
33+
type: SavingsRecordType,
34+
user: User,
35+
) {
36+
this.amount = amount;
37+
this.type = type;
38+
this.user = user;
39+
}
40+
41+
public getId(): string {
42+
return this.id;
43+
}
44+
45+
public getAmount(): number {
46+
return this.amount;
47+
}
48+
49+
public getType(): SavingsRecordType {
50+
return this.type;
51+
}
52+
53+
public getUser(): User {
54+
return this.user;
55+
}
56+
}

server/src/Infrastructure/HumanResource/humanResource.module.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { GetAvailableMealTicketsAction } from './MealTicket/Action/GetAvailableM
6262
import { GetMealTicketsPerMonthQueryHandler } from 'src/Application/HumanResource/MealTicket/Query/GetMealTicketsPerMonthQueryHandler';
6363
import { UpdateLeaveRequestAction } from './Leave/Action/UpdateLeaveRequestAction';
6464
import { UpdateLeaveRequestCommandHandler } from 'src/Application/HumanResource/Leave/Command/UpdateLeaveRequestCommandHandler';
65+
import { UserSavingsRecord } from 'src/Domain/HumanResource/Savings/UserSavingsRecord.entity';
6566

6667
@Module({
6768
imports: [
@@ -75,7 +76,8 @@ import { UpdateLeaveRequestCommandHandler } from 'src/Application/HumanResource/
7576
Leave,
7677
Event,
7778
Cooperative,
78-
MealTicketRemoval
79+
MealTicketRemoval,
80+
UserSavingsRecord
7981
])
8082
],
8183
controllers: [

0 commit comments

Comments
 (0)