Skip to content

Commit

Permalink
Merge pull request #3 from digidem/project-settings
Browse files Browse the repository at this point in the history
Project settings
  • Loading branch information
luandro authored Feb 4, 2025
2 parents 44c686b + 2e276bd commit b6be5a8
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
68 changes: 68 additions & 0 deletions src/routes/projects.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,74 @@ export default async function projectsRoutes(fastify, opts) {
return { data: projectData }
},
)
// GET /projects/:projectId/settings
fastify.get(
'/projects/:projectId/settings',
{
schema: {
params: Type.Object({
projectId: Type.String(),
}),
response: {
200: Type.Object({
data: Type.Object({
name: Type.Optional(Type.String()),
presets: Type.Array(Type.Any()),
}),
}),
404: schemas.errorResponse,
},
},
async preHandler(req) {
verifyBearerAuth(req, serverBearerToken)
},
},
async (req) => {
const { projectId } =
/** @type {import('fastify').FastifyRequest<{Params: {projectId: string}}>} */ (
req
).params
const project = await fastify.comapeo.getProject(projectId)
if (!project) {
throw errors.projectNotFoundError()
}
const settings = await project.$getProjectSettings()
if (Object.keys(settings).length === 0) {
return {
data: {
presets: [],
},
}
}
const presets = await project.preset.getMany()
const fields = await project.field.getMany()

// Create a map of field docIds to field objects for quick lookup
const fieldMap = new Map(fields.map((field) => [field.docId, field]))

// Transform presets to include linked fields directly
const presetsWithFields = presets.map((preset) => {
// Get the full field objects for each fieldRef
const linkedFields = preset.fieldRefs
.map((ref) => fieldMap.get(ref.docId))
.filter(Boolean) // Remove any undefined fields

// Return preset with fields array instead of fieldRefs
const { fieldRefs: _fieldRefs, ...presetWithoutRefs } = preset
return {
...presetWithoutRefs,
fields: linkedFields,
}
})

return {
data: {
...settings,
presets: presetsWithFields,
},
}
},
)

// PUT /projects
fastify.put(
Expand Down
9 changes: 9 additions & 0 deletions test/test_script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,15 @@ echo
FIRST_PROJECT_ID=$(echo "${RESPONSE}" | jq -r '.data[0].projectId')
FIRST_PROJECT_NAME=$(echo "${RESPONSE}" | jq -r '.data[0].name')

# Test GET /projects/:projectId/settings
echo "GET /projects/${FIRST_PROJECT_ID}/settings"
echo "-----------------------------------"
RESPONSE=$(curl -s -f -H "Authorization: Bearer ${BEARER_TOKEN}" "${HOST}/projects/${FIRST_PROJECT_ID}/settings") || (echo "❌ Failed" && exit 1)
echo "Response: ${RESPONSE}"
echo "✅ Passed"
echo


# Test GET /projects with projectId filter
echo "GET /projects with projectId filter"
echo "---------------------------------"
Expand Down

0 comments on commit b6be5a8

Please sign in to comment.