Files

269 lines
9.6 KiB
Go

// Copyright 2025 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package github
import (
"context"
"fmt"
)
// ClassroomService handles communication with the GitHub Classroom related
// methods of the GitHub API.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28
type ClassroomService service
// ClassroomUser represents a GitHub user simplified for Classroom.
type ClassroomUser struct {
ID *int64 `json:"id,omitempty"`
Login *string `json:"login,omitempty"`
AvatarURL *string `json:"avatar_url,omitempty"`
HTMLURL *string `json:"html_url,omitempty"`
}
func (u ClassroomUser) String() string {
return Stringify(u)
}
// Classroom represents a GitHub Classroom.
type Classroom struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Archived *bool `json:"archived,omitempty"`
Organization *Organization `json:"organization,omitempty"`
URL *string `json:"url,omitempty"`
}
func (c Classroom) String() string {
return Stringify(c)
}
// ClassroomAssignment represents a GitHub Classroom assignment.
type ClassroomAssignment struct {
ID *int64 `json:"id,omitempty"`
PublicRepo *bool `json:"public_repo,omitempty"`
Title *string `json:"title,omitempty"`
Type *string `json:"type,omitempty"`
InviteLink *string `json:"invite_link,omitempty"`
InvitationsEnabled *bool `json:"invitations_enabled,omitempty"`
Slug *string `json:"slug,omitempty"`
StudentsAreRepoAdmins *bool `json:"students_are_repo_admins,omitempty"`
FeedbackPullRequestsEnabled *bool `json:"feedback_pull_requests_enabled,omitempty"`
MaxTeams *int `json:"max_teams,omitempty"`
MaxMembers *int `json:"max_members,omitempty"`
Editor *string `json:"editor,omitempty"`
Accepted *int `json:"accepted,omitempty"`
Submitted *int `json:"submitted,omitempty"`
Passing *int `json:"passing,omitempty"`
Language *string `json:"language,omitempty"`
Deadline *Timestamp `json:"deadline,omitempty"`
StarterCodeRepository *Repository `json:"starter_code_repository,omitempty"`
Classroom *Classroom `json:"classroom,omitempty"`
}
func (a ClassroomAssignment) String() string {
return Stringify(a)
}
// AcceptedAssignment represents a GitHub Classroom accepted assignment.
type AcceptedAssignment struct {
ID *int64 `json:"id,omitempty"`
Submitted *bool `json:"submitted,omitempty"`
Passing *bool `json:"passing,omitempty"`
CommitCount *int `json:"commit_count,omitempty"`
Grade *string `json:"grade,omitempty"`
Students []*ClassroomUser `json:"students,omitempty"`
Repository *Repository `json:"repository,omitempty"`
Assignment *ClassroomAssignment `json:"assignment,omitempty"`
}
func (a AcceptedAssignment) String() string {
return Stringify(a)
}
// AssignmentGrade represents a GitHub Classroom assignment grade.
type AssignmentGrade struct {
AssignmentName *string `json:"assignment_name,omitempty"`
AssignmentURL *string `json:"assignment_url,omitempty"`
StarterCodeURL *string `json:"starter_code_url,omitempty"`
GithubUsername *string `json:"github_username,omitempty"`
RosterIdentifier *string `json:"roster_identifier,omitempty"`
StudentRepositoryName *string `json:"student_repository_name,omitempty"`
StudentRepositoryURL *string `json:"student_repository_url,omitempty"`
SubmissionTimestamp *Timestamp `json:"submission_timestamp,omitempty"`
PointsAwarded *int `json:"points_awarded,omitempty"`
PointsAvailable *int `json:"points_available,omitempty"`
GroupName *string `json:"group_name,omitempty"`
}
func (g AssignmentGrade) String() string {
return Stringify(g)
}
// GetAssignment gets a GitHub Classroom assignment. Assignment will only be
// returned if the current user is an administrator of the GitHub Classroom
// for the assignment.
//
// Deprecated: This endpoint has been deprecated by GitHub.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28#closed---get-an-assignment
//
//meta:operation GET /assignments/{assignment_id}
func (s *ClassroomService) GetAssignment(ctx context.Context, assignmentID int64) (*ClassroomAssignment, *Response, error) {
u := fmt.Sprintf("assignments/%v", assignmentID)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
var assignment *ClassroomAssignment
resp, err := s.client.Do(req, &assignment)
if err != nil {
return nil, resp, err
}
return assignment, resp, nil
}
// GetClassroom gets a GitHub Classroom for the current user. Classroom will only be
// returned if the current user is an administrator of the GitHub Classroom.
//
// Deprecated: This endpoint has been deprecated by GitHub.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28#closed---get-a-classroom
//
//meta:operation GET /classrooms/{classroom_id}
func (s *ClassroomService) GetClassroom(ctx context.Context, classroomID int64) (*Classroom, *Response, error) {
u := fmt.Sprintf("classrooms/%v", classroomID)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
var classroom *Classroom
resp, err := s.client.Do(req, &classroom)
if err != nil {
return nil, resp, err
}
return classroom, resp, nil
}
// ListClassrooms lists GitHub Classrooms for the current user. Classrooms will only be
// returned if the current user is an administrator of one or more GitHub Classrooms.
//
// Deprecated: This endpoint has been deprecated by GitHub.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28#closed---list-classrooms
//
//meta:operation GET /classrooms
func (s *ClassroomService) ListClassrooms(ctx context.Context, opts *ListOptions) ([]*Classroom, *Response, error) {
u, err := addOptions("classrooms", opts)
if err != nil {
return nil, nil, err
}
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
var classrooms []*Classroom
resp, err := s.client.Do(req, &classrooms)
if err != nil {
return nil, resp, err
}
return classrooms, resp, nil
}
// ListClassroomAssignments lists GitHub Classroom assignments for a classroom. Assignments will only be
// returned if the current user is an administrator of the GitHub Classroom.
//
// Deprecated: This endpoint has been deprecated by GitHub.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28#closed---list-assignments-for-a-classroom
//
//meta:operation GET /classrooms/{classroom_id}/assignments
func (s *ClassroomService) ListClassroomAssignments(ctx context.Context, classroomID int64, opts *ListOptions) ([]*ClassroomAssignment, *Response, error) {
u := fmt.Sprintf("classrooms/%v/assignments", classroomID)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
var assignments []*ClassroomAssignment
resp, err := s.client.Do(req, &assignments)
if err != nil {
return nil, resp, err
}
return assignments, resp, nil
}
// ListAcceptedAssignments lists accepted assignments for a GitHub Classroom assignment.
// Accepted assignments will only be returned if the current user is an administrator
// of the GitHub Classroom for the assignment.
//
// Deprecated: This endpoint has been deprecated by GitHub.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28#closed---list-accepted-assignments-for-an-assignment
//
//meta:operation GET /assignments/{assignment_id}/accepted_assignments
func (s *ClassroomService) ListAcceptedAssignments(ctx context.Context, assignmentID int64, opts *ListOptions) ([]*AcceptedAssignment, *Response, error) {
u := fmt.Sprintf("assignments/%v/accepted_assignments", assignmentID)
u, err := addOptions(u, opts)
if err != nil {
return nil, nil, err
}
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
var acceptedAssignments []*AcceptedAssignment
resp, err := s.client.Do(req, &acceptedAssignments)
if err != nil {
return nil, resp, err
}
return acceptedAssignments, resp, nil
}
// GetAssignmentGrades gets assignment grades for a GitHub Classroom assignment.
// Grades will only be returned if the current user is an administrator
// of the GitHub Classroom for the assignment.
//
// Deprecated: This endpoint has been deprecated by GitHub.
//
// GitHub API docs: https://docs.github.com/rest/classroom/classroom?apiVersion=2022-11-28#closed---get-assignment-grades
//
//meta:operation GET /assignments/{assignment_id}/grades
func (s *ClassroomService) GetAssignmentGrades(ctx context.Context, assignmentID int64) ([]*AssignmentGrade, *Response, error) {
u := fmt.Sprintf("assignments/%v/grades", assignmentID)
req, err := s.client.NewRequest(ctx, "GET", u, nil)
if err != nil {
return nil, nil, err
}
var grades []*AssignmentGrade
resp, err := s.client.Do(req, &grades)
if err != nil {
return nil, resp, err
}
return grades, resp, nil
}