Assignments
Create and manage homework assignments for classes.
Get Assignments
GET /teacher/exams/assignments
{
"data": {
"assignments": [
{
"id": "uuid",
"title": "Chapter 5 Homework",
"description": "Solve exercises 1-10 from Chapter 5",
"classId": "uuid",
"divisionId": "uuid",
"subject": "Mathematics",
"dueDate": "2024-04-15",
"createdAt": "2024-04-01"
}
]
}
}
Get Assignment Details
GET /teacher/exams/assignments/{assignmentId}
Returns full assignment with attached file URL.
Create Assignment
POST /teacher/exams/create-assignment
{
"data": {
"title": "Chapter 5 Homework",
"description": "Solve exercises 1-10 from Chapter 5",
"classId": "uuid",
"divisionId": "uuid",
"subjectId": "uuid",
"dueDate": "2024-04-15",
"fileUrl": "s3://bucket/assignments/hw5.pdf"
}
}
File upload uses the presigned URL pattern — same as the parents app.
Update Assignment
PUT /teacher/exams/update-assignment/{assignmentId}
UI — Assignment Card
class AssignmentCard extends StatelessWidget {
final Assignment assignment;
@override
Widget build(BuildContext context) {
final authVM = context.watch<AuthViewModel>();
final canWrite = authVM.canWrite('assignment');
return Card(
child: ListTile(
title: Text(assignment.title),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('${assignment.subject} • ${assignment.className}'),
Text('Due: ${assignment.dueDate}', style: const TextStyle(color: Colors.grey)),
],
),
trailing: canWrite
? TextButton(
onPressed: () => context.read<AssignmentViewModel>().editAssignment(assignment),
child: const Text('Edit'),
)
: null,
isThreeLine: true,
),
);
}
}