Skip to main content

agentics_domain/models/challenge_creation/
requests.rs

1//! Challenge review record request DTOs.
2
3use serde::{Deserialize, Serialize};
4
5use crate::models::auth::GithubUserId;
6use crate::models::github::GithubPullRequestNumber;
7use crate::models::hashes::{GitCommitSha, Sha256Digest};
8use crate::models::names::AssetName;
9use crate::models::paths::RepoRelativePath;
10use crate::models::urls::{GithubPullRequestUrl, GithubRepoRemote};
11
12use super::manifest::ChallengeCreationManifest;
13use super::private_assets::ChallengePrivateAssetKind;
14
15/// Creator-authenticated request for registering a public GitHub PR for review.
16#[derive(Debug, Clone, Serialize, Deserialize, garde::Validate, schemars::JsonSchema)]
17#[garde(allow_unvalidated)]
18#[serde(deny_unknown_fields)]
19pub struct CreateChallengeReviewRecordRequest {
20    pub repo_url: GithubRepoRemote,
21    pub pr_number: GithubPullRequestNumber,
22    pub pr_url: GithubPullRequestUrl,
23    pub commit_sha: GitCommitSha,
24    pub challenge_path: RepoRelativePath,
25    pub pr_author_github_user_id: GithubUserId,
26    pub manifest: ChallengeCreationManifest,
27}
28
29/// Payload for uploading a private benchmark asset to Agentics storage.
30#[derive(Debug, Clone, Serialize, Deserialize, garde::Validate, schemars::JsonSchema)]
31#[garde(allow_unvalidated)]
32#[serde(deny_unknown_fields)]
33pub struct UploadChallengePrivateAssetRequest {
34    pub asset_name: AssetName,
35    pub kind: ChallengePrivateAssetKind,
36    pub required: bool,
37    #[garde(custom(crate::validation::trimmed_non_empty))]
38    pub asset_base64: String,
39}
40
41/// Admin payload for validating a review record against a checked-out repository path.
42#[derive(Debug, Clone, Serialize, Deserialize, garde::Validate, schemars::JsonSchema)]
43#[garde(allow_unvalidated)]
44#[serde(deny_unknown_fields)]
45pub struct ValidateChallengeReviewRecordRequest {
46    #[garde(custom(crate::validation::trimmed_non_empty))]
47    pub repository_path: String,
48}
49
50/// Admin payload for accepting or rejecting a challenge review record.
51#[derive(Debug, Clone, Serialize, Deserialize, garde::Validate, schemars::JsonSchema)]
52#[garde(allow_unvalidated)]
53#[serde(deny_unknown_fields)]
54pub struct ChallengeReviewDecisionRequest {
55    #[serde(default)]
56    pub message: String,
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub expected_validation_bundle_sha256: Option<Sha256Digest>,
59}