| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_GLANCEABLES_CLASSROOM_GLANCEABLES_CLASSROOM_TYPES_H_ |
| #define ASH_GLANCEABLES_CLASSROOM_GLANCEABLES_CLASSROOM_TYPES_H_ |
| |
| #include <optional> |
| #include <string> |
| |
| #include "ash/ash_export.h" |
| #include "base/time/time.h" |
| #include "url/gurl.h" |
| |
| namespace ash { |
| |
| // Lightweight course definition. Created from `google_apis::classroom::Course` |
| // (google_apis/classroom/classroom_api_courses_response_types.h). |
| // API definition: |
| // https://developers.google.com/classroom/reference/rest/v1/courses. |
| struct ASH_EXPORT GlanceablesClassroomCourse { |
| GlanceablesClassroomCourse(const std::string& id, const std::string& name); |
| GlanceablesClassroomCourse(const GlanceablesClassroomCourse&) = delete; |
| GlanceablesClassroomCourse& operator=(const GlanceablesClassroomCourse&) = |
| delete; |
| ~GlanceablesClassroomCourse() = default; |
| |
| // Intended for debugging. |
| std::string ToString() const; |
| |
| // Identifier for this course assigned by Classroom. |
| const std::string id; |
| |
| // Name of the course. For example, "10th Grade Biology". |
| const std::string name; |
| }; |
| |
| // Student submissions state aggregated from a list of student submissions, |
| // usually associated with a course work item. |
| struct ASH_EXPORT GlanceablesClassroomAggregatedSubmissionsState { |
| GlanceablesClassroomAggregatedSubmissionsState() = default; |
| GlanceablesClassroomAggregatedSubmissionsState(int total_count, |
| int number_turned_in, |
| int number_graded); |
| GlanceablesClassroomAggregatedSubmissionsState( |
| const GlanceablesClassroomAggregatedSubmissionsState&) = default; |
| GlanceablesClassroomAggregatedSubmissionsState& operator=( |
| const GlanceablesClassroomAggregatedSubmissionsState&) = default; |
| ~GlanceablesClassroomAggregatedSubmissionsState() = default; |
| |
| void Reset(); |
| |
| // The total number of students that have this assigned to them. |
| int total_count = 0; |
| |
| // The number of this assignment that has been turned in students. |
| int number_turned_in = 0; |
| |
| // The number of this assignment that has already been graded. |
| int number_graded = 0; |
| }; |
| |
| // Represents a single classroom assignment. This data is aggregated from all |
| // student submissions for this assignment. |
| struct ASH_EXPORT GlanceablesClassroomAssignment { |
| public: |
| GlanceablesClassroomAssignment( |
| const std::string& course_title, |
| const std::string& course_work_title, |
| const GURL& link, |
| const std::optional<base::Time>& due, |
| const base::Time& last_update, |
| std::optional<GlanceablesClassroomAggregatedSubmissionsState> |
| submissions_state); |
| GlanceablesClassroomAssignment(const GlanceablesClassroomAssignment&) = |
| delete; |
| GlanceablesClassroomAssignment& operator=( |
| const GlanceablesClassroomAssignment&) = delete; |
| ~GlanceablesClassroomAssignment() = default; |
| |
| // Intended for debugging. |
| std::string ToString() const; |
| |
| // Title of the course this assignment belongs to. |
| const std::string course_title; |
| |
| // Title of the course work item this assignment belongs to. |
| const std::string course_work_title; |
| |
| // Absolute link for redirects to Classroom web UI. |
| const GURL link; |
| |
| // Due date and time in UTC of this course work item. |
| const std::optional<base::Time> due; |
| |
| // The timestamp of the last course work item update. |
| const base::Time last_update; |
| |
| // Stats about overall student submissions state of the assignment. |
| const std::optional<GlanceablesClassroomAggregatedSubmissionsState> |
| submissions_state; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_GLANCEABLES_CLASSROOM_GLANCEABLES_CLASSROOM_TYPES_H_ |