syntax = "proto3";

package next_edu_cloud.core_edu.v1;

// CoreEdu service contracts - P3 core teaching domain.
// Covers exam management, homework assignment, and grade recording.
// Event contracts live in events.proto under next_edu_cloud.events.v1.

service ExamService {
  rpc CreateExam(CreateExamRequest) returns (CreateExamResponse);
  rpc GetExam(GetExamRequest) returns (Exam);
  rpc ListExamsByClass(ListExamsByClassRequest) returns (ListExamsResponse);
  rpc UpdateExam(UpdateExamRequest) returns (UpdateExamResponse);
  rpc DeleteExam(DeleteExamRequest) returns (DeleteExamResponse);
}

service HomeworkService {
  rpc AssignHomework(AssignHomeworkRequest) returns (AssignHomeworkResponse);
  rpc GetHomework(GetHomeworkRequest) returns (Homework);
  rpc ListHomeworkByClass(ListHomeworkByClassRequest) returns (ListHomeworkResponse);
  rpc SubmitHomework(SubmitHomeworkRequest) returns (SubmitHomeworkResponse);
}

service GradeService {
  rpc RecordGrade(RecordGradeRequest) returns (RecordGradeResponse);
  rpc GetGrade(GetGradeRequest) returns (Grade);
  rpc ListGradesByStudent(ListGradesByStudentRequest) returns (ListGradesResponse);
  rpc ListGradesByExam(ListGradesByExamRequest) returns (ListGradesResponse);
  rpc ListGradesByHomework(ListGradesByHomeworkRequest) returns (ListGradesResponse);
}

message Exam {
  string id = 1;
  string class_id = 2;
  string title = 3;
  string description = 4;
  string exam_date = 5;
  string duration = 6;
  string total_score = 7;
  string status = 8;
  string created_by = 9;
  string created_at = 10;
  string updated_at = 11;
}

message Homework {
  string id = 1;
  string class_id = 2;
  string title = 3;
  string description = 4;
  string due_date = 5;
  string status = 6;
  string created_by = 7;
  string created_at = 8;
  string updated_at = 9;
}

message Grade {
  string id = 1;
  string student_id = 2;
  string exam_id = 3;
  string homework_id = 4;
  string score = 5;
  string feedback = 6;
  string graded_by = 7;
  string created_at = 8;
  string updated_at = 9;
}

message CreateExamRequest {
  string class_id = 1;
  string title = 2;
  string description = 3;
  string exam_date = 4;
  string duration = 5;
  string total_score = 6;
  string created_by = 7;
}

message CreateExamResponse {
  string id = 1;
}

message GetExamRequest {
  string id = 1;
}

message ListExamsByClassRequest {
  string class_id = 1;
}

message ListExamsResponse {
  repeated Exam exams = 1;
}

message UpdateExamRequest {
  string id = 1;
  string title = 2;
  string description = 3;
  string exam_date = 4;
  string duration = 5;
  string total_score = 6;
  string status = 7;
}

message UpdateExamResponse {
  bool success = 1;
}

message DeleteExamRequest {
  string id = 1;
}

message DeleteExamResponse {
  bool success = 1;
}

message AssignHomeworkRequest {
  string class_id = 1;
  string title = 2;
  string description = 3;
  string due_date = 4;
  string created_by = 5;
}

message AssignHomeworkResponse {
  string id = 1;
}

message GetHomeworkRequest {
  string id = 1;
}

message ListHomeworkByClassRequest {
  string class_id = 1;
}

message ListHomeworkResponse {
  repeated Homework homework = 1;
}

message SubmitHomeworkRequest {
  string id = 1;
}

message SubmitHomeworkResponse {
  bool success = 1;
}

message RecordGradeRequest {
  string student_id = 1;
  string exam_id = 2;
  string homework_id = 3;
  string score = 4;
  string feedback = 5;
  string graded_by = 6;
}

message RecordGradeResponse {
  string id = 1;
}

message GetGradeRequest {
  string id = 1;
}

message ListGradesByStudentRequest {
  string student_id = 1;
}

message ListGradesByExamRequest {
  string exam_id = 1;
}

message ListGradesByHomeworkRequest {
  string homework_id = 1;
}

message ListGradesResponse {
  repeated Grade grades = 1;
}
