change: types and search options

This commit is contained in:
Julian Krauser 2025-03-26 11:50:54 +01:00
parent fd042cf18d
commit 9685b6166d
6 changed files with 40 additions and 12 deletions

View file

@ -16,8 +16,16 @@ import {
} from "../../viewmodels/admin/member.models"; } from "../../viewmodels/admin/member.models";
import { BaseClient } from "../../clients/clientBase"; import { BaseClient } from "../../clients/clientBase";
interface GetMemberParams {
offset?: number;
count?: number;
search?: string;
noLimit?: boolean;
ids?: string[];
}
interface IMemberRequests { interface IMemberRequests {
getAllMembers: RequestDefinition<void, void, MemberViewModel[]>; getAllMembers: RequestDefinition<GetMemberParams, void, MemberViewModel[]>;
getMemberById: RequestDefinition<{ id: string }, void, MemberViewModel>; getMemberById: RequestDefinition<{ id: string }, void, MemberViewModel>;
getMemberStatisticsById: RequestDefinition<{ id: string }, void, MemberStatisticsViewModel>; getMemberStatisticsById: RequestDefinition<{ id: string }, void, MemberStatisticsViewModel>;
createMember: RequestDefinition<void, CreateMemberViewModel, string>; createMember: RequestDefinition<void, CreateMemberViewModel, string>;
@ -58,8 +66,9 @@ interface IMemberRequests {
@ImplementsRequestInterface<IMemberRequests>() @ImplementsRequestInterface<IMemberRequests>()
export default abstract class MemberRequests { export default abstract class MemberRequests {
static async getAllMembers({ http }: BaseClient): Promise<AxiosResponse<MemberViewModel[], any>> { static async getAllMembers({ http }: BaseClient, p: RequestData<GetMemberParams, void>): Promise<AxiosResponse<MemberViewModel[], any>> {
return await http.get("/admin/member"); const queryParams = new URLSearchParams(Object.fromEntries(Object.entries(p.params).filter(([_, v]) => v !== undefined))).toString();
return await http.get(`/admin/member?${queryParams}`);
} }
static async getMemberById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<MemberViewModel, any>> { static async getMemberById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<MemberViewModel, any>> {
return await http.get(`/admin/member/${p.params.id}`); return await http.get(`/admin/member/${p.params.id}`);

View file

@ -4,6 +4,12 @@ import { CreateQueryViewModel, QueryExecuteResult, QueryViewModel, UpdateQueryVi
import { DynamicQueryStructure } from "../../types/admin/dynamicQueries"; import { DynamicQueryStructure } from "../../types/admin/dynamicQueries";
import { BaseClient } from "../../clients/clientBase"; import { BaseClient } from "../../clients/clientBase";
interface GetQueryParams {
offset?: number;
count?: number;
noLimit?: boolean;
}
interface IQueryRequests { interface IQueryRequests {
getQueries: RequestDefinition<void, void, QueryViewModel[]>; getQueries: RequestDefinition<void, void, QueryViewModel[]>;
getQueryById: RequestDefinition<{ id: number }, void, QueryViewModel>; getQueryById: RequestDefinition<{ id: number }, void, QueryViewModel>;
@ -11,7 +17,7 @@ interface IQueryRequests {
updateQuery: RequestDefinition<{ id: number }, UpdateQueryViewModel, void>; updateQuery: RequestDefinition<{ id: number }, UpdateQueryViewModel, void>;
deleteQuery: RequestDefinition<{ id: number }, void, void>; deleteQuery: RequestDefinition<{ id: number }, void, void>;
executeQuery: RequestDefinition<void, DynamicQueryStructure | string, QueryExecuteResult>; executeQuery: RequestDefinition<GetQueryParams, DynamicQueryStructure | string, QueryExecuteResult>;
} }
@ImplementsRequestInterface<IQueryRequests>() @ImplementsRequestInterface<IQueryRequests>()
@ -34,8 +40,9 @@ export default abstract class QueryDataRequests {
static async executeQuery( static async executeQuery(
{ http }: BaseClient, { http }: BaseClient,
p: RequestData<void, DynamicQueryStructure | string> p: RequestData<GetQueryParams, DynamicQueryStructure | string | "member" | "memberByRunningMembership">
): Promise<AxiosResponse<QueryExecuteResult, any>> { ): Promise<AxiosResponse<QueryExecuteResult, any>> {
return await http.post(`/admin/query`, p.body); const queryParams = new URLSearchParams(Object.fromEntries(Object.entries(p.params).filter(([_, v]) => v !== undefined))).toString();
return await http.post(`/admin/query?${queryParams}`, p.body);
} }
} }

View file

@ -6,6 +6,7 @@ export type PermissionModule =
| "newsletter" | "newsletter"
| "newsletter_config" | "newsletter_config"
| "protocol" | "protocol"
| "listprint"
| "qualification" | "qualification"
| "award" | "award"
| "executive_position" | "executive_position"
@ -19,7 +20,8 @@ export type PermissionModule =
| "query" | "query"
| "query_store" | "query_store"
| "template" | "template"
| "template_usage"; | "template_usage"
| "backup";
export type PermissionType = "read" | "create" | "update" | "delete"; export type PermissionType = "read" | "create" | "update" | "delete";
@ -49,6 +51,7 @@ export const permissionModules: Array<PermissionModule> = [
"newsletter", "newsletter",
"newsletter_config", "newsletter_config",
"protocol", "protocol",
"listprint",
"qualification", "qualification",
"award", "award",
"executive_position", "executive_position",
@ -63,10 +66,11 @@ export const permissionModules: Array<PermissionModule> = [
"query_store", "query_store",
"template", "template",
"template_usage", "template_usage",
"backup",
]; ];
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"]; export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
export const sectionsAndModules: SectionsAndModulesObject = { export const sectionsAndModules: SectionsAndModulesObject = {
club: ["member", "calendar", "newsletter", "protocol", "query"], club: ["member", "calendar", "newsletter", "protocol", "query", "listprint"],
configuration: [ configuration: [
"qualification", "qualification",
"award", "award",
@ -80,5 +84,5 @@ export const sectionsAndModules: SectionsAndModulesObject = {
"template_usage", "template_usage",
"newsletter_config", "newsletter_config",
], ],
management: ["user", "role", "webapi"], management: ["user", "role", "webapi", "backup"],
}; };

View file

@ -13,7 +13,7 @@ export interface NewsletterViewModel {
newsletterText: string; newsletterText: string;
newsletterSignatur: string; newsletterSignatur: string;
isSent: boolean; isSent: boolean;
recipientsByQueryId?: number | null; recipientsByQueryId?: string | null;
recipientsByQuery?: QueryViewModel | null; recipientsByQuery?: QueryViewModel | null;
} }
export interface CreateNewsletterViewModel { export interface CreateNewsletterViewModel {
@ -25,7 +25,7 @@ export interface SyncNewsletterViewModel {
newsletterTitle: string; newsletterTitle: string;
newsletterText: string; newsletterText: string;
newsletterSignatur: string; newsletterSignatur: string;
recipientsByQueryId?: number; recipientsByQueryId?: string;
} }
/** Newsletter Recipient Models */ /** Newsletter Recipient Models */

View file

@ -24,12 +24,14 @@ export interface ProtocolAgendaViewModel {
id: number; id: number;
topic: string; topic: string;
context: string; context: string;
sort: number;
protocolId: number; protocolId: number;
} }
export interface SyncProtocolAgendaViewModel { export interface SyncProtocolAgendaViewModel {
id: number; id: number;
topic: string; topic: string;
context: string; context: string;
sort: number;
} }
/** Protocol Decision Models */ /** Protocol Decision Models */
@ -37,12 +39,14 @@ export interface ProtocolDecisionViewModel {
id: number; id: number;
topic: string; topic: string;
context: string; context: string;
sort: number;
protocolId: number; protocolId: number;
} }
export interface SyncProtocolDecisionViewModel { export interface SyncProtocolDecisionViewModel {
id: number; id: number;
topic: string; topic: string;
context: string; context: string;
sort: number;
} }
/** Protocol Presence Models */ /** Protocol Presence Models */
@ -50,6 +54,7 @@ export interface ProtocolPresenceViewModel {
memberId: string; memberId: string;
absent: boolean; absent: boolean;
excused: boolean; excused: boolean;
sort: number;
protocolId: number; protocolId: number;
} }
export interface SyncProtocolPresenceViewModel { export interface SyncProtocolPresenceViewModel {
@ -57,6 +62,7 @@ export interface SyncProtocolPresenceViewModel {
memberId: string; memberId: string;
absent: boolean; absent: boolean;
excused: boolean; excused: boolean;
sort: number;
}>; }>;
} }
@ -68,6 +74,7 @@ export interface ProtocolVotingViewModel {
favour: number; favour: number;
abstain: number; abstain: number;
against: number; against: number;
sort: number;
protocolId: number; protocolId: number;
} }
export interface SyncProtocolVotingViewModel { export interface SyncProtocolVotingViewModel {
@ -77,6 +84,7 @@ export interface SyncProtocolVotingViewModel {
favour: number; favour: number;
abstain: number; abstain: number;
against: number; against: number;
sort: number;
} }
/** Protocol Printout Models */ /** Protocol Printout Models */

View file

@ -2,7 +2,7 @@ import { DynamicQueryStructure, FieldType } from "../../types/admin/dynamicQueri
/** Query Store Models */ /** Query Store Models */
export interface QueryViewModel { export interface QueryViewModel {
id: number; id: string;
title: string; title: string;
query: string | DynamicQueryStructure; query: string | DynamicQueryStructure;
} }