Move issue creation calls into the jira client

This commit is contained in:
Daan Boerlage 2025-01-22 01:27:00 +01:00
parent 8a7c989f48
commit 194e25dc14
Signed by: daan
GPG key ID: FCE070E1E4956606
14 changed files with 280 additions and 180 deletions

View file

@ -1,5 +1,11 @@
mod issue_create_command;
mod issue_transitions_command;
mod issue_transitions_update_command;
mod search_command;
mod self_command;
pub use issue_create_command::IssueCreateCommand;
pub use issue_transitions_command::IssueTransitionsCommand;
pub use issue_transitions_update_command::IssueTransitionsUpdateCommand;
pub use search_command::SearchCommand;
pub use self_command::SelfCommand;

View file

@ -0,0 +1,31 @@
use crate::client::{JiraCommand, JiraRequestType};
use crate::entities::issue_request::{IssueCreateRequest, IssueCreateResponse};
#[derive(Debug)]
pub struct IssueCreateCommand {
issue: IssueCreateRequest,
}
impl IssueCreateCommand {
pub fn new(issue: IssueCreateRequest) -> Self {
Self { issue }
}
}
impl JiraCommand for IssueCreateCommand {
type TResponse = IssueCreateResponse;
type TPayload = IssueCreateRequest;
const REQUEST_TYPE: JiraRequestType = JiraRequestType::Create;
fn endpoint(&self) -> String {
"/rest/api/2/issue".to_string()
}
fn request_body(&self) -> Option<&Self::TPayload> {
Some(&self.issue)
}
fn query_params(&self) -> Option<Vec<(String, String)>> {
None
}
}

View file

@ -0,0 +1,33 @@
use crate::client::{JiraCommand, JiraRequestType};
use crate::entities::transitions::Transitions;
#[derive(Debug)]
pub struct IssueTransitionsCommand {
issue_key: String,
}
impl IssueTransitionsCommand {
pub fn new(issue_key: &str) -> Self {
Self {
issue_key: issue_key.to_string(),
}
}
}
impl JiraCommand for IssueTransitionsCommand {
type TResponse = Transitions;
type TPayload = ();
const REQUEST_TYPE: JiraRequestType = JiraRequestType::Read;
fn endpoint(&self) -> String {
format!("/rest/api/3/issue/{}/transitions", self.issue_key)
}
fn request_body(&self) -> Option<&Self::TPayload> {
None
}
fn query_params(&self) -> Option<Vec<(String, String)>> {
None
}
}

View file

@ -0,0 +1,39 @@
use crate::client::{JiraCommand, JiraRequestType};
use crate::entities::transitions::{IssueTransitionUpdatePayload, IssueTransitionUpdatePayloadId};
#[derive(Debug)]
pub struct IssueTransitionsUpdateCommand {
pub issue_key: String,
pub transition: IssueTransitionUpdatePayload,
}
impl IssueTransitionsUpdateCommand {
pub fn new(issue_key: &str, transition_id: &str) -> Self {
Self {
issue_key: issue_key.to_string(),
transition: IssueTransitionUpdatePayload {
transition: IssueTransitionUpdatePayloadId {
id: transition_id.to_string(),
},
},
}
}
}
impl JiraCommand for IssueTransitionsUpdateCommand {
type TResponse = ();
type TPayload = IssueTransitionUpdatePayload;
const REQUEST_TYPE: JiraRequestType = JiraRequestType::Create;
fn endpoint(&self) -> String {
format!("/rest/api/3/issue/{}/transitions", self.issue_key)
}
fn request_body(&self) -> Option<&Self::TPayload> {
Some(&self.transition)
}
fn query_params(&self) -> Option<Vec<(String, String)>> {
None
}
}