base con autenticacion, registro, modulo encuestas

This commit is contained in:
2025-06-16 12:02:22 -04:00
commit 475e0754df
411 changed files with 26265 additions and 0 deletions

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