Voorbeeld 3: Projectmanagementsysteem
In dit voorbeeld maken we een API voor een projectmanagementsysteem met de volgende collecties:
- Projects: een collectie van projecten met eigenschappen zoals naam, beschrijving, datums en status
- Tasks: een collectie van taken die aan projecten en medewerkers zijn gekoppeld
- Employees: een collectie van medewerkers met hun rollen, afdelingen en uurtarieven
- Clients: een collectie van klanten waarvoor projecten worden uitgevoerd
- TimeEntries: een collectie van tijdsregistraties van medewerkers op taken
Volledige JSON-configuratie
{ "collections": [ { "name": "projects", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 3, "max": 100 }, { "name": "description", "type": "string", "max": 1000 }, { "name": "startDate", "type": "date", "required": true }, { "name": "deadline", "type": "date", "required": true }, { "name": "status", "type": "string", "required": true, "Default": "planning" }, { "name": "clientId", "type": "reference:clients", "required": true } ], "permissions": { "GET": ["employee", "manager", "admin"], "POST": ["manager", "admin"], "PUT": ["manager", "admin"], "DELETE": ["admin"] } }, { "name": "tasks", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "projectId", "type": "reference:projects", "required": true }, { "name": "title", "type": "string", "required": true, "min": 3, "max": 100 }, { "name": "description", "type": "string", "max": 1000 }, { "name": "assignedTo", "type": "reference:employees", "required": true }, { "name": "status", "type": "string", "required": true, "Default": "to do" }, { "name": "priority", "type": "string", "required": true, "Default": "medium" }, { "name": "dueDate", "type": "date", "required": true }, { "name": "estimatedHours", "type": "number", "required": true, "min": 0.5 } ], "permissions": { "GET": ["employee", "manager", "admin"], "POST": ["manager", "admin"], "PUT": ["employee", "manager", "admin"], "DELETE": ["manager", "admin"] } }, { "name": "employees", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "email", "type": "string", "required": true, "min": 5, "max": 100 }, { "name": "department", "type": "string", "required": true }, { "name": "role", "type": "string", "required": true }, { "name": "hourlyRate", "type": "number", "required": true, "min": 0 } ], "permissions": { "GET": ["employee", "manager", "admin"], "POST": ["admin"], "PUT": ["admin"], "DELETE": ["admin"] } }, { "name": "clients", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "contactPerson", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "email", "type": "string", "required": true, "min": 5, "max": 100 }, { "name": "phone", "type": "string", "max": 20 }, { "name": "address", "type": "string", "max": 200 } ], "permissions": { "GET": ["employee", "manager", "admin"], "POST": ["admin", "manager"], "PUT": ["admin", "manager"], "DELETE": ["admin"] } }, { "name": "timeEntries", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "employeeId", "type": "reference:employees", "required": true }, { "name": "taskId", "type": "reference:tasks", "required": true }, { "name": "date", "type": "date", "required": true, "Default": "CurrentDate" }, { "name": "hours", "type": "number", "required": true, "min": 0.25, "max": 24 }, { "name": "description", "type": "string", "max": 500 }, { "name": "approved", "type": "boolean", "required": true, "Default": false } ], "permissions": { "GET": ["employee", "manager", "admin"], "POST": ["employee", "manager", "admin"], "PUT": ["manager", "admin"], "DELETE": ["manager", "admin"] } } ], "users": [ { "email": "[email protected]", "password": "admin123", "roles": ["admin"] }, { "email": "[email protected]", "password": "manager123", "roles": ["manager"] }, { "email": "[email protected]", "password": "employee123", "roles": ["employee"] } ], "data": { "clients": [ { "id": 1, "name": "ABC Bedrijf", "contactPerson": "John Doe", "email": "[email protected]", "phone": "0612345678", "address": "Hoofdstraat 1, Amsterdam" }, { "id": 2, "name": "XYZ Organisatie", "contactPerson": "Jane Smith", "email": "[email protected]", "phone": "0687654321", "address": "Zakenstraat 10, Rotterdam" } ], "employees": [ { "id": 1, "name": "Alex de Vries", "email": "[email protected]", "department": "Ontwikkeling", "role": "Ontwikkelaar", "hourlyRate": 65 }, { "id": 2, "name": "Robin Janssen", "email": "[email protected]", "department": "Design", "role": "UI/UX Designer", "hourlyRate": 60 }, { "id": 3, "name": "Sam Peters", "email": "[email protected]", "department": "Ontwikkeling", "role": "Backend Developer", "hourlyRate": 70 } ], "projects": [ { "id": 1, "name": "Website Redesign", "description": "Herontwerp van de bedrijfswebsite", "startDate": "2025-01-15", "deadline": "2025-03-31", "status": "in progress", "clientId": 1 }, { "id": 2, "name": "Mobile App Ontwikkeling", "description": "Ontwikkeling van een klanten-app", "startDate": "2025-02-01", "deadline": "2025-05-30", "status": "planning", "clientId": 2 } ], "tasks": [ { "id": 1, "projectId": 1, "title": "Wireframes maken", "description": "Wireframes maken voor alle pagina's", "assignedTo": 2, "status": "completed", "priority": "high", "dueDate": "2025-01-25", "estimatedHours": 16 }, { "id": 2, "projectId": 1, "title": "Frontend development", "description": "Implementeren van het design in HTML/CSS/JS", "assignedTo": 1, "status": "in progress", "priority": "high", "dueDate": "2025-02-28", "estimatedHours": 40 }, { "id": 3, "projectId": 1, "title": "Backend development", "description": "API en database ontwikkeling", "assignedTo": 3, "status": "in progress", "priority": "medium", "dueDate": "2025-03-15", "estimatedHours": 60 } ], "timeEntries": [ { "id": 1, "employeeId": 2, "taskId": 1, "date": "2025-01-20", "hours": 7.5, "description": "Wireframes voor homepagina en contactpagina", "approved": true }, { "id": 2, "employeeId": 2, "taskId": 1, "date": "2025-01-21", "hours": 8, "description": "Wireframes voor overige pagina's", "approved": true }, { "id": 3, "employeeId": 1, "taskId": 2, "date": "2025-02-01", "hours": 6, "description": "Setup project en implementatie header/footer", "approved": false } ] } }
Belangrijkste kenmerken
- Verschillende rollen: Admin, Manager en Employee met verschillende toegangsrechten
- Hiƫrarchie van toestemmingen: Admins kunnen alles, Managers kunnen veel, Employees hebben beperkte rechten
- Projectgebaseerd systeem: Projecten bevatten taken die worden toegewezen aan medewerkers
- Tijdsregistratie: Medewerkers kunnen tijd registreren op taken
- Klantenbeheer: Projecten zijn gekoppeld aan klanten