Enhance branch management with foreign key relation handling
- Updated `BranchesModule` to include foreign key relations in list and write responses, ensuring they are represented as nested objects using `pickRelation`. - Introduced new `relation-response.mdc` file to define guidelines for embedding foreign key relations. - Modified `BranchesRepository` to support fetching related `division`, `createdByUser`, and `updatedByUser` data. - Updated DTOs and service methods to reflect changes in response structure, removing direct foreign key IDs. - Added unit tests to validate the new relation handling in branches service and repository. - Enhanced e2e tests to verify the correct structure of branch responses with nested relations.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
export const DEFAULT_RELATION_FIELDS = ['id', 'code', 'name'] as const;
|
||||
export const USER_RELATION_FIELDS = ['id', 'username'] as const;
|
||||
|
||||
export type DefaultRelation = {
|
||||
readonly id: string;
|
||||
readonly code: string;
|
||||
readonly name: string;
|
||||
};
|
||||
|
||||
export type UserRelation = {
|
||||
readonly id: string;
|
||||
readonly username: string;
|
||||
};
|
||||
|
||||
export function pickRelation<T, K extends keyof NonNullable<T>>(
|
||||
source: T | null | undefined,
|
||||
fields: readonly K[],
|
||||
): Pick<NonNullable<T>, K> | null {
|
||||
if (source == null) {
|
||||
return null;
|
||||
}
|
||||
const result = {} as Pick<NonNullable<T>, K>;
|
||||
for (const field of fields) {
|
||||
result[field] = source[field];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export function pickDefaultRelation(
|
||||
source: DefaultRelation | null | undefined,
|
||||
): DefaultRelation | null {
|
||||
return pickRelation(source, DEFAULT_RELATION_FIELDS);
|
||||
}
|
||||
|
||||
export function pickUserRelation(source: UserRelation): UserRelation {
|
||||
return (
|
||||
pickRelation(source, USER_RELATION_FIELDS) ?? {
|
||||
id: source.id,
|
||||
username: source.username,
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user