enhance: provide latest inserted internal Id
This commit is contained in:
parent
a827185bf1
commit
a6229bb77c
6 changed files with 83 additions and 5 deletions
|
@ -92,6 +92,18 @@ export async function getMembersByIds(req: Request, res: Response): Promise<any>
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @description get member latest inserted InternalId
|
||||
* @param req {Request} Express req object
|
||||
* @param res {Response} Express res object
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
export async function getMemberLastInternalId(req: Request, res: Response): Promise<any> {
|
||||
let latest = await MemberService.getLatestInternalId();
|
||||
|
||||
res.send(latest);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description get member by id
|
||||
* @param req {Request} Express req object
|
||||
|
|
|
@ -51,6 +51,7 @@ import { TemplatesAndProtocolSort1742549956787 } from "./migrations/174254995678
|
|||
import { QueryToUUID1742922178643 } from "./migrations/1742922178643-queryToUUID";
|
||||
import { NewsletterColumnType1744351418751 } from "./migrations/1744351418751-newsletterColumnType";
|
||||
import { QueryUpdatedAt1744795756230 } from "./migrations/1744795756230-QueryUpdatedAt";
|
||||
import { MemberCreatedAt1746006549262 } from "./migrations/1746006549262-memberCreatedAt";
|
||||
|
||||
const dataSource = new DataSource({
|
||||
type: DB_TYPE as any,
|
||||
|
@ -111,6 +112,7 @@ const dataSource = new DataSource({
|
|||
QueryToUUID1742922178643,
|
||||
NewsletterColumnType1744351418751,
|
||||
QueryUpdatedAt1744795756230,
|
||||
MemberCreatedAt1746006549262,
|
||||
],
|
||||
migrationsRun: true,
|
||||
migrationsTransactionMode: "each",
|
||||
|
|
|
@ -1,4 +1,14 @@
|
|||
import { Column, ColumnType, Entity, JoinColumn, ManyToOne, OneToMany, OneToOne, PrimaryColumn } from "typeorm";
|
||||
import {
|
||||
Column,
|
||||
ColumnType,
|
||||
CreateDateColumn,
|
||||
Entity,
|
||||
JoinColumn,
|
||||
ManyToOne,
|
||||
OneToMany,
|
||||
OneToOne,
|
||||
PrimaryColumn,
|
||||
} from "typeorm";
|
||||
import { membership } from "./membership";
|
||||
import { memberAwards } from "./memberAwards";
|
||||
import { memberQualifications } from "./memberQualifications";
|
||||
|
@ -30,6 +40,9 @@ export class member {
|
|||
@Column()
|
||||
salutationId: number;
|
||||
|
||||
@CreateDateColumn()
|
||||
createdAt: Date;
|
||||
|
||||
@ManyToOne(() => salutation, (salutation) => salutation.members, {
|
||||
nullable: false,
|
||||
onDelete: "RESTRICT",
|
||||
|
|
21
src/migrations/1746006549262-memberCreatedAt.ts
Normal file
21
src/migrations/1746006549262-memberCreatedAt.ts
Normal file
|
@ -0,0 +1,21 @@
|
|||
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";
|
||||
import { getTypeByORM, getDefaultByORM } from "./ormHelper";
|
||||
|
||||
export class MemberCreatedAt1746006549262 implements MigrationInterface {
|
||||
name = "MemberCreatedAt1746006549262";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.addColumn(
|
||||
"member",
|
||||
new TableColumn({
|
||||
name: "createdAt",
|
||||
...getTypeByORM("datetime", false, 6),
|
||||
default: getDefaultByORM("currentTimestamp", 6),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.dropColumn("member", "createdAt");
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@ import {
|
|||
getExecutivePositionByMemberAndRecord,
|
||||
getExecutivePositionsByMember,
|
||||
getMemberById,
|
||||
getMemberLastInternalId,
|
||||
getMemberPrintoutById,
|
||||
getMembersByIds,
|
||||
getMembershipByMemberAndRecord,
|
||||
|
@ -43,6 +44,10 @@ router.get("/", async (req: Request, res: Response) => {
|
|||
await getAllMembers(req, res);
|
||||
});
|
||||
|
||||
router.get("/last/internalId", async (req: Request, res: Response) => {
|
||||
await getMemberLastInternalId(req, res);
|
||||
});
|
||||
|
||||
router.post("/ids", async (req: Request, res: Response) => {
|
||||
await getMembersByIds(req, res);
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Brackets, Like, SelectQueryBuilder } from "typeorm";
|
||||
import { Brackets, Like, Not, SelectQueryBuilder } from "typeorm";
|
||||
import { dataSource } from "../../../data-source";
|
||||
import { member } from "../../../entity/club/member/member";
|
||||
import { membership } from "../../../entity/club/member/membership";
|
||||
|
@ -31,9 +31,12 @@ export default abstract class MemberService {
|
|||
let searchBits = search.split(" ");
|
||||
|
||||
if (searchBits.length < 2) {
|
||||
query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, {
|
||||
query = query.where(
|
||||
`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery OR member.internalId LIKE :searchQuery`,
|
||||
{
|
||||
searchQuery: `%${searchBits[0]}%`,
|
||||
});
|
||||
}
|
||||
);
|
||||
} else {
|
||||
searchBits
|
||||
.flatMap((v, i) => searchBits.slice(i + 1).map((w) => [v, w]))
|
||||
|
@ -157,6 +160,28 @@ export default abstract class MemberService {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @description get latest inserted memberId
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
static async getLatestInternalId(): Promise<string> {
|
||||
return await dataSource
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.where("member.internalId IS NOT NULL")
|
||||
.andWhere({ internalId: Not("") })
|
||||
.orderBy("member.createdAt", "DESC")
|
||||
.addOrderBy("member.internalId", "DESC")
|
||||
.limit(1)
|
||||
.getOne()
|
||||
.then((res) => {
|
||||
return res?.internalId ?? "";
|
||||
})
|
||||
.catch((err) => {
|
||||
throw new DatabaseActionException("SELECT", "memberId", err);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @description apply member joins to query
|
||||
* @returns {SelectQueryBuilder<member>}
|
||||
|
|
Loading…
Add table
Reference in a new issue