updated appenders service

This commit is contained in:
Berkay 2025-05-04 00:21:38 +03:00
parent 01f3e82a54
commit 0cde34a9bc
12 changed files with 492 additions and 62 deletions

View File

@ -30,3 +30,23 @@ def service_list_route(
FoundCluster = ServiceEndpointRouterCluster.get_event_cluster("ServiceList") FoundCluster = ServiceEndpointRouterCluster.get_event_cluster("ServiceList")
event_cluster_matched = FoundCluster.match_event(event_key=event_key) event_cluster_matched = FoundCluster.match_event(event_key=event_key)
return event_cluster_matched.event_callable(data=data) return event_cluster_matched.event_callable(data=data)
@service_endpoint_route.post(
path="/to/events",
description="List events of a service endpoint given service UUID",
operation_id="7b6b0c6a-e3db-4353-a7df-ea49d2a67f8a",
)
def service_to_events_route(
data: PaginateOnly,
headers: CommonHeaders = Depends(CommonHeaders.as_dependency),
):
"""
List events of a service given service UUID
"""
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
FoundCluster = ServiceEndpointRouterCluster.get_event_cluster("ServiceToEvents")
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
return event_cluster_matched.event_callable(data=data)

View File

@ -1,6 +1,7 @@
from ApiControllers.abstracts.event_clusters import EventCluster, RouterCluster from ApiControllers.abstracts.event_clusters import EventCluster, RouterCluster
from .supers_events import ( from .supers_events import (
ServiceEndpointListEvent, ServiceEndpointListEvent,
ServiceEndpointToEventsEvent,
) )
ServiceEndpointRouterCluster = RouterCluster(name="ServiceEndpointRouterCluster") ServiceEndpointRouterCluster = RouterCluster(name="ServiceEndpointRouterCluster")
@ -8,4 +9,10 @@ ServiceEndpointEventClusterList = EventCluster(
name="ServiceList", endpoint_uu_id="f4e4d332-70b1-4121-9fcc-a08850b72aaa" name="ServiceList", endpoint_uu_id="f4e4d332-70b1-4121-9fcc-a08850b72aaa"
) )
ServiceEndpointEventClusterList.add_event(ServiceEndpointListEvent) ServiceEndpointEventClusterList.add_event(ServiceEndpointListEvent)
ServiceEndpointEventClusterToService = EventCluster(
name="ServiceToEvents", endpoint_uu_id="7b6b0c6a-e3db-4353-a7df-ea49d2a67f8a"
)
ServiceEndpointEventClusterToService.add_event(ServiceEndpointToEventsEvent)
ServiceEndpointRouterCluster.set_event_cluster(ServiceEndpointEventClusterList) ServiceEndpointRouterCluster.set_event_cluster(ServiceEndpointEventClusterList)

View File

@ -1,7 +1,7 @@
from ApiControllers.abstracts.event_clusters import Event from ApiControllers.abstracts.event_clusters import Event
from Controllers.Postgres.pagination import Pagination, PaginationResult, PaginateOnly from Controllers.Postgres.pagination import Pagination, PaginationResult, PaginateOnly
from Controllers.Postgres.response import EndpointResponse from Controllers.Postgres.response import EndpointResponse
from Schemas import Services from Schemas import Services, Service2Events
# List endpoint # List endpoint
@ -27,8 +27,35 @@ def service_endpoint_list_callable(data: PaginateOnly):
pagination = Pagination(data=services_list) pagination = Pagination(data=services_list)
pagination.change(**data.model_dump()) pagination.change(**data.model_dump())
pagination_result = PaginationResult(data=services_list, pagination=pagination) pagination_result = PaginationResult(data=services_list, pagination=pagination)
print("service pagination_result", pagination_result)
return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response
ServiceEndpointListEvent.event_callable = service_endpoint_list_callable ServiceEndpointListEvent.event_callable = service_endpoint_list_callable
# To events endpoint
ServiceEndpointToEventsEvent = Event(
name="service_endpoint_to_events",
key="7b6b0c6a-e3db-4353-a7df-ea49d2a67f8a",
request_validator=None, # TODO: Add request validator
response_validator=None, # TODO: Add response validator
description="Super Users List events of a service endpoint given service UUID",
)
def service_endpoint_to_events_callable(data: PaginateOnly):
"""
List events of a service given service UUID
"""
list_options = PaginateOnly(**data.model_dump())
with Service2Events.new_session() as db_session:
if data.query:
services_list = Service2Events.filter_all_system(*Service2Events.convert(data.query), db=db_session)
else:
services_list = Service2Events.filter_all_system(db=db_session)
pagination = Pagination(data=services_list)
pagination.change(**data.model_dump())
pagination_result = PaginationResult(data=services_list, pagination=pagination)
return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response
ServiceEndpointToEventsEvent.event_callable = service_endpoint_to_events_callable

View File

@ -0,0 +1,84 @@
"use server";
import { fetchDataWithToken } from "../api-fetcher";
import { baseUrlApplication } from "../basics";
import { PaginationParams } from "../schemas/list";
import type { PaginatedApiResponse } from "@/app/api/utils/types";
const eventsListEndpoint = `${baseUrlApplication}/events/list`;
async function listEvents(payload: PaginationParams): Promise<PaginatedApiResponse<any>> {
try {
const response = await fetchDataWithToken(
eventsListEndpoint,
{
page: payload.page,
size: payload.size,
order_field: payload.orderField,
order_type: payload.orderType,
query: payload.query,
},
"POST",
false
);
if (response?.status === 200 || response?.status === 202) {
const responseData = response.data as PaginatedApiResponse<any>;
return {
data: responseData.data || [],
pagination: {
page: responseData.pagination?.page || 1,
size: responseData.pagination?.size || 10,
totalCount: responseData.pagination?.totalCount || 0,
totalItems: responseData.pagination?.totalItems || 0,
totalPages: responseData.pagination?.totalPages || 0,
pageCount: responseData.pagination?.pageCount || 0,
orderField: responseData.pagination?.orderField || ['name'],
orderType: responseData.pagination?.orderType || ['asc'],
query: responseData.pagination?.query || {},
next: responseData.pagination?.next || false,
back: responseData.pagination?.back || false
}
};
}
return {
data: [],
pagination: {
page: 1,
size: 10,
totalCount: 0,
totalItems: 0,
totalPages: 0,
pageCount: 0,
orderField: ['name'],
orderType: ['asc'],
query: {},
next: false,
back: false
}
};
} catch (error) {
console.error("Error fetching events list:", error);
// Return a default empty response instead of null to match the expected return type
return {
data: [],
pagination: {
page: 1,
size: 10,
totalCount: 0,
totalItems: 0,
totalPages: 0,
pageCount: 0,
orderField: ['name'],
orderType: ['asc'],
query: {},
next: false,
back: false
}
};
}
}
export {
listEvents,
};

View File

@ -6,6 +6,7 @@ import { PaginationParams } from "../schemas/list";
import type { PaginatedApiResponse } from "@/app/api/utils/types"; import type { PaginatedApiResponse } from "@/app/api/utils/types";
const servicesListEndpoint = `${baseUrlApplication}/service/list`; const servicesListEndpoint = `${baseUrlApplication}/service/list`;
const servicesToEventsEndpoint = `${baseUrlApplication}/service/to/events`;
async function listServices(payload: PaginationParams): Promise<PaginatedApiResponse<any>> { async function listServices(payload: PaginationParams): Promise<PaginatedApiResponse<any>> {
try { try {
@ -79,6 +80,78 @@ async function listServices(payload: PaginationParams): Promise<PaginatedApiResp
} }
} }
async function listEventsToService(payload: PaginationParams): Promise<PaginatedApiResponse<any>> {
try {
const response = await fetchDataWithToken(
servicesToEventsEndpoint,
{
page: payload.page,
size: payload.size,
order_field: payload.orderField,
order_type: payload.orderType,
query: payload.query,
},
"POST",
false,
);
if (response?.status === 200 || response?.status === 202) {
const responseData = response.data as PaginatedApiResponse<any>;
return {
data: responseData.data || [],
pagination: {
page: responseData.pagination?.page || 1,
size: responseData.pagination?.size || 10,
totalCount: responseData.pagination?.totalCount || 0,
totalItems: responseData.pagination?.totalItems || 0,
totalPages: responseData.pagination?.totalPages || 0,
pageCount: responseData.pagination?.pageCount || 0,
orderField: responseData.pagination?.orderField || ['name'],
orderType: responseData.pagination?.orderType || ['asc'],
query: responseData.pagination?.query || {},
next: responseData.pagination?.next || false,
back: responseData.pagination?.back || false
}
};
}
return {
data: [],
pagination: {
page: 1,
size: 10,
totalCount: 0,
totalItems: 0,
totalPages: 0,
pageCount: 0,
orderField: ['name'],
orderType: ['asc'],
query: {},
next: false,
back: false
}
};
} catch (error) {
console.error("Error fetching application list:", error);
// Return a default empty response instead of null to match the expected return type
return {
data: [],
pagination: {
page: 1,
size: 10,
totalCount: 0,
totalItems: 0,
totalPages: 0,
pageCount: 0,
orderField: ['name'],
orderType: ['asc'],
query: {},
next: false,
back: false
}
};
}
}
export { export {
listServices, listServices,
listEventsToService,
}; };

View File

@ -1,4 +1,4 @@
import { listApplications } from "@/apicalls/application/endpoints"; import { listEventsToService } from "@/apicalls/services/endpoints";
import { createListHandler } from "@/app/api/utils"; import { createListHandler } from "@/app/api/utils";
export const POST = createListHandler(listApplications); export const POST = createListHandler(listEventsToService);

View File

@ -1,4 +1,4 @@
import { listApplications } from "@/apicalls/application/endpoints"; import { listEvents } from "@/apicalls/events/endpoints";
import { createListHandler } from "@/app/api/utils"; import { createListHandler } from "@/app/api/utils";
export const POST = createListHandler(listApplications); export const POST = createListHandler(listEvents);

View File

@ -6,10 +6,13 @@ import {
ServiceBaseTranslationEn, ServiceBaseTranslationEn,
ServiceBaseTranslationTr, ServiceBaseTranslationTr,
} from "./schemaList/services"; } from "./schemaList/services";
import {
AppenderBaseTranslationEn,
AppenderBaseTranslationTr,
} from "./schemaList/appenders";
export const translations = { const translations = {
en: { en: {
...ServiceBaseTranslationEn,
// Page title // Page title
mainTitle: "Services", mainTitle: "Services",
@ -74,7 +77,7 @@ export const translations = {
}, },
tr: { tr: {
// Page title // Page title
...ServiceBaseTranslationTr,
mainTitle: "Servisler", mainTitle: "Servisler",
// Common actions // Common actions
@ -137,6 +140,46 @@ export const translations = {
}, },
}; };
const translationsServices = {
en: {
...translations.en,
...ServiceBaseTranslationEn,
},
tr: {
...translations.tr,
...ServiceBaseTranslationTr,
},
};
const translationsAppenders = {
en: {
...translations.en,
...AppenderBaseTranslationEn,
},
tr: {
...translations.tr,
...AppenderBaseTranslationTr,
},
};
const translationsEvents = {
en: {
...translations.en,
// ...EventBaseTranslationEn,
},
tr: {
...translations.tr,
// ...EventBaseTranslationTr,
},
};
export {
translations,
translationsServices,
translationsAppenders,
translationsEvents,
};
export function getTranslation(lang: LanguageKey): TranslationSet { export function getTranslation(lang: LanguageKey): TranslationSet {
return translations[lang]; return translations[lang];
} }

View File

@ -2,11 +2,16 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { z } from "zod"; import { z } from "zod";
import * as schemaServices from "./schemaList/services"; import {
ServiceData,
serviceViewFieldDefinitions,
ServiceFieldDefinitionsType,
ServiceSchema,
} from "./schemaList/services";
import * as schema from "./schemaList/schema"; import * as schema from "./schemaList/schema";
import { ListComponentEvents, ListComponentServices } from "./listComponent"; import { ListComponentEvents, ListComponentServices } from "./listComponent";
import { translations } from "./language"; import { translations, translationsServices, translationsAppenders, translationsEvents } from "./language";
import { PageProps } from "@/validations/translations/translation"; import { PageProps } from "@/validations/translations/translation";
import { FormModeView, FormMode } from "@/components/common/FormDisplay/types"; import { FormModeView, FormMode } from "@/components/common/FormDisplay/types";
@ -26,7 +31,7 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
error: errorServices, error: errorServices,
updatePagination: updatePaginationServices, updatePagination: updatePaginationServices,
refetch: refetchServices refetch: refetchServices
} = useApiData<schemaServices.ServiceData>('/api/services'); } = useApiData<ServiceData>('/api/services');
const { const {
data: dataEvents, data: dataEvents,
pagination: paginationEvents, pagination: paginationEvents,
@ -47,11 +52,11 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
const [mode, setMode] = useState<FormModeView | FormMode>("list"); const [mode, setMode] = useState<FormModeView | FormMode>("list");
const [gridCols, setGridCols] = useState<GridSize>(3); const [gridCols, setGridCols] = useState<GridSize>(3);
const [selectedItemServices, setSelectedItemServices] = useState<schemaServices.ServiceData | null>(null); const [selectedItemServices, setSelectedItemServices] = useState<ServiceData | null>(null);
const [selectedItemEvents, setSelectedItemEvents] = useState<schema.ApplicationData | null>(null); const [selectedItemEvents, setSelectedItemEvents] = useState<schema.ApplicationData | null>(null);
const [selectedItemAppenders, setSelectedItemAppenders] = useState<schema.ApplicationData | null>(null); const [selectedItemAppenders, setSelectedItemAppenders] = useState<schema.ApplicationData | null>(null);
const [fieldDefinitionsServices, setFieldDefinitionsServices] = useState<schemaServices.FieldDefinitionsType | null>(null); const [fieldDefinitionsServices, setFieldDefinitionsServices] = useState<ServiceFieldDefinitionsType | null>(null);
const [fieldDefinitionsEvents, setFieldDefinitionsEvents] = useState<schema.FieldDefinitionsType | null>(null); const [fieldDefinitionsEvents, setFieldDefinitionsEvents] = useState<schema.FieldDefinitionsType | null>(null);
const [fieldDefinitionsAppenders, setFieldDefinitionsAppenders] = useState<schema.FieldDefinitionsType | null>(null); const [fieldDefinitionsAppenders, setFieldDefinitionsAppenders] = useState<schema.FieldDefinitionsType | null>(null);
@ -63,7 +68,7 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
const showFieldsEvents = ["description", "marketing_layer", "cost"]; const showFieldsEvents = ["description", "marketing_layer", "cost"];
useEffect(() => { useEffect(() => {
setFieldDefinitionsServices(schemaServices.viewFieldDefinitions); setValidationSchemaServices(schemaServices.ViewServiceSchema); setFieldDefinitionsServices(serviceViewFieldDefinitions); setValidationSchemaServices(ServiceSchema);
setFieldDefinitionsEvents(schema.viewFieldDefinitions); setValidationSchemaEvents(schema.ViewApplicationSchema); setFieldDefinitionsEvents(schema.viewFieldDefinitions); setValidationSchemaEvents(schema.ViewApplicationSchema);
setFieldDefinitionsAppenders(schema.viewFieldDefinitions); setValidationSchemaAppenders(schema.ViewApplicationSchema); setFieldDefinitionsAppenders(schema.viewFieldDefinitions); setValidationSchemaAppenders(schema.ViewApplicationSchema);
}, [lang]); }, [lang]);
@ -73,8 +78,8 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
if (value === null) { delete newQuery[key] } else if (value.trim() === "") { delete newQuery[key] } else { newQuery[key] = value } if (value === null) { delete newQuery[key] } else if (value.trim() === "") { delete newQuery[key] } else { newQuery[key] = value }
updatePaginationServices({ page: 1, query: newQuery }) updatePaginationServices({ page: 1, query: newQuery })
}; };
const handleServicesCardClick = (item: schemaServices.ServiceData) => { setSelectedItemServices(item); setMode("list"); }; const handleServicesCardClick = (item: ServiceData) => { setSelectedItemServices(item); setMode("list"); };
const handleServicesViewClick = (item: schemaServices.ServiceData) => { setSelectedItemServices(item); setMode("view"); }; const handleServicesViewClick = (item: ServiceData) => { setSelectedItemServices(item); setMode("view"); };
const handleEventsCardClick = (item: schema.ApplicationData) => { console.log("Events Card clicked:", item) }; const handleEventsCardClick = (item: schema.ApplicationData) => { console.log("Events Card clicked:", item) };
const handleEventsViewClick = (item: schema.ApplicationData) => { setSelectedItemEvents(item); setMode("view"); }; const handleEventsViewClick = (item: schema.ApplicationData) => { setSelectedItemEvents(item); setMode("view"); };
@ -142,7 +147,7 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
setSelectedItem: setSelectedItemServices, setSelectedItem: setSelectedItemServices,
onCancel: cancelAllSelections, onCancel: cancelAllSelections,
lang: lang, lang: lang,
translations: translations, translations: translationsServices,
apiUrl: '/api/services', apiUrl: '/api/services',
formProps: { formProps: {
fieldDefinitions: fieldDefinitionsServices, fieldDefinitions: fieldDefinitionsServices,
@ -159,7 +164,7 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
setSelectedItem: setSelectedItemEvents, setSelectedItem: setSelectedItemEvents,
onCancel: cancelAllSelections, onCancel: cancelAllSelections,
lang: lang, lang: lang,
translations: translations, translations: translationsEvents,
apiUrl: '/api/events', apiUrl: '/api/events',
formProps: { formProps: {
fieldDefinitions: fieldDefinitionsEvents, fieldDefinitions: fieldDefinitionsEvents,
@ -168,6 +173,10 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
} }
}; };
const removeAppendersFromEvents = (events: schema.ApplicationData[], appenders: schema.ApplicationData[]) => {
}
const appendersFormProps = { const appendersFormProps = {
initialData: selectedItemAppenders || undefined, initialData: selectedItemAppenders || undefined,
mode: mode, mode: mode,
@ -176,7 +185,7 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
setSelectedItem: setSelectedItemAppenders, setSelectedItem: setSelectedItemAppenders,
onCancel: cancelAllSelections, onCancel: cancelAllSelections,
lang: lang, lang: lang,
translations: translations, translations: translationsAppenders,
apiUrl: '/api/appenders', apiUrl: '/api/appenders',
formProps: { formProps: {
fieldDefinitions: fieldDefinitionsAppenders, fieldDefinitions: fieldDefinitionsAppenders,
@ -209,7 +218,7 @@ const AppendersServicePage: React.FC<PageProps> = ({ lang }: { lang: Language })
</div> </div>
) : ( ) : (
<div className="flex flex-col space-y-4"> <div className="flex flex-col space-y-4">
{selectedItemServices && <FormDisplay<schemaServices.ServiceData> {...serviceFormProps} />} {selectedItemServices && <FormDisplay<ServiceData> {...serviceFormProps} />}
{selectedItemEvents && <FormDisplay<schema.ApplicationData> {...eventsFormProps} />} {selectedItemEvents && <FormDisplay<schema.ApplicationData> {...eventsFormProps} />}
{selectedItemAppenders && <FormDisplay<schema.ApplicationData> {...appendersFormProps} />} {selectedItemAppenders && <FormDisplay<schema.ApplicationData> {...appendersFormProps} />}
</div> </div>

View File

@ -0,0 +1,171 @@
import { z } from "zod";
import { flattenFieldDefinitions } from "@/eventRouters/schemas/zodSchemas";
interface AppendersData {
uu_id: string;
service_uu_id: string;
event_uu_id: string;
is_confirmed: boolean;
active: boolean;
deleted?: boolean;
created_at?: string;
updated_at?: string;
}
const errorMessages = {
en: {
serviceUuIdRequired: "Service UUID is required",
eventUuIdRequired: "Event UUID is required",
},
tr: {
serviceUuIdRequired: "Servis UUID'si gereklidir",
eventUuIdRequired: "Etkinlik UUID'si gereklidir",
},
};
const getServiceBaseSchema = (lang: "en" | "tr" = "en") =>
z.object({
uu_id: z.string().optional(),
service_uu_id: z.string().min(1, errorMessages[lang].serviceUuIdRequired),
event_uu_id: z.string().min(1, errorMessages[lang].eventUuIdRequired),
is_confirmed: z.boolean().default(false),
active: z.boolean().default(true),
deleted: z.boolean().default(false),
created_at: z.string().optional(),
updated_at: z.string().optional(),
});
const AppenderBaseSchema = getServiceBaseSchema("en");
const AppenderBaseTranslationTr = {
uu_id: "UUID",
service_uu_id: "Servis UUID'si",
event_uu_id: "Etkinlik UUID'si",
is_confirmed: "Onaylandı",
active: "Active",
deleted: "Deleted",
created_at: "Created At",
updated_at: "Updated At",
};
const AppenderBaseTranslationEn = {
uu_id: "UUID",
service_uu_id: "Service UUID",
event_uu_id: "Event UUID",
is_confirmed: "Confirmed",
active: "Active",
deleted: "Deleted",
created_at: "Created At",
updated_at: "Updated At",
};
const serviceBaseFieldDefinitions = {
identificationInfo: {
title: "Service Information",
order: 1,
fields: {
uu_id: {
type: "text",
label: {
tr: AppenderBaseTranslationTr.uu_id,
en: AppenderBaseTranslationEn.uu_id,
},
readOnly: true,
required: false,
},
service_uu_id: {
type: "text",
label: {
tr: AppenderBaseTranslationTr.service_uu_id,
en: AppenderBaseTranslationEn.service_uu_id,
},
readOnly: false,
required: true,
},
event_uu_id: {
type: "text",
label: {
tr: AppenderBaseTranslationTr.event_uu_id,
en: AppenderBaseTranslationEn.event_uu_id,
},
readOnly: false,
required: true,
},
},
},
statusInfo: {
title: "Status Information",
order: 3,
fields: {
active: {
type: "checkbox",
label: {
tr: AppenderBaseTranslationTr.active,
en: AppenderBaseTranslationEn.active,
},
readOnly: false,
required: false,
defaultValue: true,
},
deleted: {
type: "checkbox",
label: {
tr: AppenderBaseTranslationTr.deleted,
en: AppenderBaseTranslationEn.deleted,
},
readOnly: true,
required: false,
defaultValue: false,
},
is_confirmed: {
type: "checkbox",
label: {
tr: AppenderBaseTranslationTr.is_confirmed,
en: AppenderBaseTranslationEn.is_confirmed,
},
readOnly: false,
required: true,
},
},
},
systemInfo: {
title: "System Information",
order: 4,
fields: {
created_at: {
type: "date",
label: {
tr: AppenderBaseTranslationTr.created_at,
en: AppenderBaseTranslationEn.created_at,
},
readOnly: true,
required: false,
},
updated_at: {
type: "date",
label: {
tr: AppenderBaseTranslationTr.updated_at,
en: AppenderBaseTranslationEn.updated_at,
},
readOnly: true,
required: false,
},
},
},
};
const ViewAppenderSchema = AppenderBaseSchema;
const AppenderSchema = AppenderBaseSchema;
const appenderFlatFieldDefinitions = flattenFieldDefinitions(
serviceBaseFieldDefinitions
);
type AppenderFieldDefinitionsType = typeof appenderFlatFieldDefinitions;
export type { AppendersData, AppenderFieldDefinitionsType };
export {
AppenderSchema,
appenderFlatFieldDefinitions,
AppenderBaseTranslationEn,
AppenderBaseTranslationTr,
};

View File

@ -1,7 +1,7 @@
import { z } from "zod"; import { z } from "zod";
import { flattenFieldDefinitions } from "@/eventRouters/schemas/zodSchemas"; import { flattenFieldDefinitions } from "@/eventRouters/schemas/zodSchemas";
export interface ServiceData { interface ServiceData {
uu_id: string; uu_id: string;
module_uu_id: string; module_uu_id: string;
service_name: string; service_name: string;
@ -44,8 +44,7 @@ const getServiceBaseSchema = (lang: "en" | "tr" = "en") =>
}); });
const ServiceBaseSchema = getServiceBaseSchema("en"); const ServiceBaseSchema = getServiceBaseSchema("en");
const ServiceBaseTranslationTr = {
export const ServiceBaseTranslationTr = {
uu_id: "UUID", uu_id: "UUID",
module_uu_id: "Modül UUID'si", module_uu_id: "Modül UUID'si",
service_name: "Servis Adı", service_name: "Servis Adı",
@ -58,8 +57,7 @@ export const ServiceBaseTranslationTr = {
created_at: "Created At", created_at: "Created At",
updated_at: "Updated At", updated_at: "Updated At",
}; };
const ServiceBaseTranslationEn = {
export const ServiceBaseTranslationEn = {
uu_id: "UUID", uu_id: "UUID",
module_uu_id: "Module UUID", module_uu_id: "Module UUID",
service_name: "Service Name", service_name: "Service Name",
@ -72,21 +70,9 @@ export const ServiceBaseTranslationEn = {
created_at: "Created At", created_at: "Created At",
updated_at: "Updated At", updated_at: "Updated At",
}; };
const ViewServiceSchema = ServiceBaseSchema; const ViewServiceSchema = ServiceBaseSchema;
const ServiceSchema = ServiceBaseSchema; const ServiceSchema = ServiceBaseSchema;
const serviceBaseFieldDefinitions = {
export {
ServiceBaseSchema,
ServiceSchema,
ViewServiceSchema,
getServiceBaseSchema,
};
export type ServiceFormData = z.infer<typeof ServiceSchema>;
export type ViewServiceFormData = z.infer<typeof ViewServiceSchema>;
const baseFieldDefinitions = {
identificationInfo: { identificationInfo: {
title: "Service Information", title: "Service Information",
order: 1, order: 1,
@ -209,90 +195,100 @@ const baseFieldDefinitions = {
}, },
}, },
}; };
const serviceFlatFieldDefinitions = flattenFieldDefinitions(
const flatFieldDefinitions = flattenFieldDefinitions(baseFieldDefinitions); serviceBaseFieldDefinitions
export const viewFieldDefinitions = { );
const serviceViewFieldDefinitions = {
uu_id: { uu_id: {
...flatFieldDefinitions.uu_id, ...serviceFlatFieldDefinitions.uu_id,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: 0, defaultValue: 0,
}, },
module_uu_id: { module_uu_id: {
...flatFieldDefinitions.module_uu_id, ...serviceFlatFieldDefinitions.module_uu_id,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
service_name: { service_name: {
...flatFieldDefinitions.service_name, ...serviceFlatFieldDefinitions.service_name,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
service_description: { service_description: {
...flatFieldDefinitions.service_description, ...serviceFlatFieldDefinitions.service_description,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
service_code: { service_code: {
...flatFieldDefinitions.service_code, ...serviceFlatFieldDefinitions.service_code,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
related_responsibility: { related_responsibility: {
...flatFieldDefinitions.related_responsibility, ...serviceFlatFieldDefinitions.related_responsibility,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
active: { active: {
...flatFieldDefinitions.active, ...serviceFlatFieldDefinitions.active,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: true, defaultValue: true,
}, },
is_confirmed: { is_confirmed: {
...flatFieldDefinitions.is_confirmed, ...serviceFlatFieldDefinitions.is_confirmed,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: true, defaultValue: true,
}, },
deleted: { deleted: {
...flatFieldDefinitions.deleted, ...serviceFlatFieldDefinitions.deleted,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: false, defaultValue: false,
}, },
created_at: { created_at: {
...flatFieldDefinitions.created_at, ...serviceFlatFieldDefinitions.created_at,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
updated_at: { updated_at: {
...flatFieldDefinitions.updated_at, ...serviceFlatFieldDefinitions.updated_at,
readOnly: true, readOnly: true,
required: false, required: false,
defaultValue: "", defaultValue: "",
}, },
}; };
const serviceFieldDefinitions = {
export const fieldDefinitions = { ...serviceBaseFieldDefinitions,
...baseFieldDefinitions,
getDefinitionsByMode: (mode: "view") => { getDefinitionsByMode: (mode: "view") => {
switch (mode) { switch (mode) {
case "view": case "view":
return viewFieldDefinitions; return serviceViewFieldDefinitions;
default: default:
return baseFieldDefinitions; return serviceBaseFieldDefinitions;
} }
}, },
}; };
const serviceFieldsByMode = {
export const fieldsByMode = { view: Object.keys(serviceViewFieldDefinitions),
view: Object.keys(viewFieldDefinitions), };
type ServiceFormData = z.infer<typeof ServiceSchema>;
type ServiceViewFormData = z.infer<typeof ViewServiceSchema>;
type ServiceFieldDefinitionsType = typeof serviceViewFieldDefinitions;
export type { ServiceData, ServiceFieldDefinitionsType };
export {
ServiceSchema,
serviceViewFieldDefinitions,
ServiceBaseTranslationEn,
ServiceBaseTranslationTr,
}; };
export type FieldDefinitionsType = typeof viewFieldDefinitions;