base con autenticacion, registro, modulo encuestas
This commit is contained in:
216
apps/web/feactures/surveys/actions/surveys-actions.ts
Normal file
216
apps/web/feactures/surveys/actions/surveys-actions.ts
Normal file
@@ -0,0 +1,216 @@
|
||||
'use server';
|
||||
import { safeFetchApi } from '@/lib/fetch.api';
|
||||
import { SurveyAnswerMutate, Survey, SurveyResponse, surveysApiResponseSchema, suveryApiMutationResponseSchema, suveryResponseDeleteSchema, surveysApiResponseForUserSchema } from '../schemas/survey';
|
||||
import { auth } from '@/lib/auth';
|
||||
|
||||
|
||||
|
||||
const transformSurvey = (survey: any) => {
|
||||
|
||||
return survey.map((survey: any) => {
|
||||
return {
|
||||
...survey,
|
||||
published: survey.published ? 'Publicada': 'Borrador',
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
export const getSurveysAction = async (params: {
|
||||
page?: number;
|
||||
limit?: number;
|
||||
search?: string;
|
||||
sortBy?: string;
|
||||
sortOrder?: 'asc' | 'desc';
|
||||
}) => {
|
||||
|
||||
const searchParams = new URLSearchParams({
|
||||
page: (params.page || 1).toString(),
|
||||
limit: (params.limit || 10).toString(),
|
||||
...(params.search && { search: params.search }),
|
||||
...(params.sortBy && { sortBy: params.sortBy }),
|
||||
...(params.sortOrder && { sortOrder: params.sortOrder }),
|
||||
});
|
||||
|
||||
const [error, response] = await safeFetchApi(
|
||||
surveysApiResponseSchema,
|
||||
`/surveys?${searchParams}`,
|
||||
'GET',
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('Error:', error);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
|
||||
|
||||
const transformedData = response?.data ? transformSurvey(response?.data) : undefined;
|
||||
|
||||
return {
|
||||
data: transformedData,
|
||||
meta: response?.meta || {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
totalCount: 0,
|
||||
totalPages: 1,
|
||||
hasNextPage: false,
|
||||
hasPreviousPage: false,
|
||||
nextPage: null,
|
||||
previousPage: null,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
export const getSurveysForUserAction = async (params: {
|
||||
page?: number;
|
||||
limit?: number;
|
||||
search?: string;
|
||||
sortBy?: string;
|
||||
sortOrder?: 'asc' | 'desc';
|
||||
}) => {
|
||||
const session = await auth()
|
||||
const searchParams = new URLSearchParams({
|
||||
page: (params.page || 1).toString(),
|
||||
limit: (params.limit || 10).toString(),
|
||||
...(params.search && { search: params.search }),
|
||||
...(params.sortBy && { sortBy: params.sortBy }),
|
||||
...(params.sortOrder && { sortOrder: params.sortOrder }),
|
||||
});
|
||||
const rol = {
|
||||
rol: session?.user.role
|
||||
}
|
||||
const [error, response] = await safeFetchApi(
|
||||
surveysApiResponseForUserSchema,
|
||||
`/surveys/for-user?${searchParams}`,
|
||||
'POST',
|
||||
rol
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('Error:', error);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
|
||||
|
||||
const transformedData = response?.data ? transformSurvey(response?.data) : undefined;
|
||||
|
||||
return {
|
||||
data: transformedData,
|
||||
meta: response?.meta || {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
totalCount: 0,
|
||||
totalPages: 1,
|
||||
hasNextPage: false,
|
||||
hasPreviousPage: false,
|
||||
nextPage: null,
|
||||
previousPage: null,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export const createSurveyAction = async (payload: Survey) => {
|
||||
const { id, ...payloadWithoutId } = payload;
|
||||
|
||||
const [error, data] = await safeFetchApi(
|
||||
suveryApiMutationResponseSchema,
|
||||
'/surveys',
|
||||
'POST',
|
||||
payloadWithoutId,
|
||||
);
|
||||
|
||||
if (error) {
|
||||
if (error.message === 'Survey already exists') {
|
||||
throw new Error('Ya existe una encuesta con ese titulo');
|
||||
}
|
||||
// console.error('Error:', error);
|
||||
throw new Error('Error al crear la encuesta');
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
export const updateSurveyAction = async (payload: Survey) => {
|
||||
const { id, ...payloadWithoutId } = payload;
|
||||
|
||||
|
||||
const [error, data] = await safeFetchApi(
|
||||
suveryApiMutationResponseSchema,
|
||||
`/surveys/${id}`,
|
||||
'PATCH',
|
||||
payloadWithoutId,
|
||||
);
|
||||
|
||||
if (error) {
|
||||
if (error.message === 'Survey already exists') {
|
||||
throw new Error('Ya existe otra encuesta con ese titulo');
|
||||
}
|
||||
if (error.message === 'Survey not found') {
|
||||
throw new Error('No se encontró la encuesta');
|
||||
}
|
||||
// console.error('Error:', error);
|
||||
// throw new Error(error.message);
|
||||
throw new Error('Error al actualizar la encuesta');
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
export const deleteSurveyAction = async (id: number) => {
|
||||
const [error, data] = await safeFetchApi(
|
||||
suveryResponseDeleteSchema,
|
||||
`/surveys/${id}`,
|
||||
'DELETE',
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('Error:', error);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
export const getSurveyByIdAction = async (id: number) => {
|
||||
const [error, data] = await safeFetchApi(
|
||||
suveryApiMutationResponseSchema,
|
||||
`/surveys/${id}`,
|
||||
'GET',
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('❌ Error en la API:', error);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
export const saveSurveysAction = async (payload: Survey) => {
|
||||
try {
|
||||
if (payload.id) {
|
||||
return await updateSurveyAction(payload);
|
||||
} else {
|
||||
return await createSurveyAction(payload);
|
||||
}
|
||||
} catch (error: any) {
|
||||
throw new Error(error.message || 'Error saving account surveys');
|
||||
}
|
||||
};
|
||||
|
||||
export const saveSurveyAnswer = async (payload: SurveyResponse) => {
|
||||
const [error, data] = await safeFetchApi(
|
||||
SurveyAnswerMutate,
|
||||
'/surveys/answers',
|
||||
'POST',
|
||||
payload,
|
||||
)
|
||||
|
||||
if (error) {
|
||||
console.error('Error:', error);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
Reference in New Issue
Block a user