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",
"required": false,
"max": 1000
},
{
"name": "startDate",
"type": "date",
"required": true
},
{
"name": "deadline",
"type": "date",
"required": true
},
{
"name": "status",
"type": "string",
"required": false,
"Default": "planning"
},
{
"name": "clientId",
"type": "reference:clients",
"required": true
}
],
"permissions": {
"GET": ["employee", "manager", "admin"],
"POST": ["manager", "admin"],
"PUT": ["manager", "admin"],
"PATCH": ["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",
"required": false,
"max": 1000
},
{
"name": "assignedTo",
"type": "reference:employees",
"required": true
},
{
"name": "status",
"type": "string",
"required": false,
"Default": "to do"
},
{
"name": "priority",
"type": "string",
"required": false,
"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"],
"PATCH": ["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"],
"PATCH": ["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",
"required": false,
"max": 20
},
{
"name": "address",
"type": "string",
"required": false,
"max": 200
}
],
"permissions": {
"GET": ["employee", "manager", "admin"],
"POST": ["admin", "manager"],
"PUT": ["admin", "manager"],
"PATCH": ["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": false,
"Default": "CurrentDate"
},
{
"name": "hours",
"type": "number",
"required": true,
"min": 0.25,
"max": 24
},
{
"name": "description",
"type": "string",
"required": false,
"max": 500
},
{
"name": "approved",
"type": "boolean",
"required": true
}
],
"permissions": {
"GET": ["employee", "manager", "admin"],
"POST": ["employee", "manager", "admin"],
"PUT": ["manager", "admin"],
"PATCH": ["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