enhance: provide latest inserted internal Id

This commit is contained in:
Julian Krauser 2025-04-30 12:22:38 +02:00
parent a827185bf1
commit a6229bb77c
6 changed files with 83 additions and 5 deletions

View file

@ -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 * @description get member by id
* @param req {Request} Express req object * @param req {Request} Express req object

View file

@ -51,6 +51,7 @@ import { TemplatesAndProtocolSort1742549956787 } from "./migrations/174254995678
import { QueryToUUID1742922178643 } from "./migrations/1742922178643-queryToUUID"; import { QueryToUUID1742922178643 } from "./migrations/1742922178643-queryToUUID";
import { NewsletterColumnType1744351418751 } from "./migrations/1744351418751-newsletterColumnType"; import { NewsletterColumnType1744351418751 } from "./migrations/1744351418751-newsletterColumnType";
import { QueryUpdatedAt1744795756230 } from "./migrations/1744795756230-QueryUpdatedAt"; import { QueryUpdatedAt1744795756230 } from "./migrations/1744795756230-QueryUpdatedAt";
import { MemberCreatedAt1746006549262 } from "./migrations/1746006549262-memberCreatedAt";
const dataSource = new DataSource({ const dataSource = new DataSource({
type: DB_TYPE as any, type: DB_TYPE as any,
@ -111,6 +112,7 @@ const dataSource = new DataSource({
QueryToUUID1742922178643, QueryToUUID1742922178643,
NewsletterColumnType1744351418751, NewsletterColumnType1744351418751,
QueryUpdatedAt1744795756230, QueryUpdatedAt1744795756230,
MemberCreatedAt1746006549262,
], ],
migrationsRun: true, migrationsRun: true,
migrationsTransactionMode: "each", migrationsTransactionMode: "each",

View file

@ -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 { membership } from "./membership";
import { memberAwards } from "./memberAwards"; import { memberAwards } from "./memberAwards";
import { memberQualifications } from "./memberQualifications"; import { memberQualifications } from "./memberQualifications";
@ -30,6 +40,9 @@ export class member {
@Column() @Column()
salutationId: number; salutationId: number;
@CreateDateColumn()
createdAt: Date;
@ManyToOne(() => salutation, (salutation) => salutation.members, { @ManyToOne(() => salutation, (salutation) => salutation.members, {
nullable: false, nullable: false,
onDelete: "RESTRICT", onDelete: "RESTRICT",

View 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");
}
}

View file

@ -20,6 +20,7 @@ import {
getExecutivePositionByMemberAndRecord, getExecutivePositionByMemberAndRecord,
getExecutivePositionsByMember, getExecutivePositionsByMember,
getMemberById, getMemberById,
getMemberLastInternalId,
getMemberPrintoutById, getMemberPrintoutById,
getMembersByIds, getMembersByIds,
getMembershipByMemberAndRecord, getMembershipByMemberAndRecord,
@ -43,6 +44,10 @@ router.get("/", async (req: Request, res: Response) => {
await getAllMembers(req, res); 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) => { router.post("/ids", async (req: Request, res: Response) => {
await getMembersByIds(req, res); await getMembersByIds(req, res);
}); });

View file

@ -1,4 +1,4 @@
import { Brackets, Like, SelectQueryBuilder } from "typeorm"; import { Brackets, Like, Not, SelectQueryBuilder } from "typeorm";
import { dataSource } from "../../../data-source"; import { dataSource } from "../../../data-source";
import { member } from "../../../entity/club/member/member"; import { member } from "../../../entity/club/member/member";
import { membership } from "../../../entity/club/member/membership"; import { membership } from "../../../entity/club/member/membership";
@ -31,9 +31,12 @@ export default abstract class MemberService {
let searchBits = search.split(" "); let searchBits = search.split(" ");
if (searchBits.length < 2) { 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]}%`, searchQuery: `%${searchBits[0]}%`,
}); }
);
} else { } else {
searchBits searchBits
.flatMap((v, i) => searchBits.slice(i + 1).map((w) => [v, w])) .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 * @description apply member joins to query
* @returns {SelectQueryBuilder<member>} * @returns {SelectQueryBuilder<member>}