186 lines
6.1 KiB
C#
186 lines
6.1 KiB
C#
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable.
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace BlueMine.Redmine
|
|
{
|
|
public static class RedmineConstants
|
|
{
|
|
public const int ClosedStatusId = 30;
|
|
public const int EstimatedHoursCustomFieldId = 65;
|
|
}
|
|
|
|
public class RedmineDto
|
|
{
|
|
public class SimpleIssue
|
|
{
|
|
public int Id { get; set; }
|
|
public string ProjectName { get; set; }
|
|
public string Subject { get; set; }
|
|
public string Description { get; set; }
|
|
public DateTime Created { get; set; }
|
|
public DateTime Updated { get; set; }
|
|
}
|
|
|
|
public class SimpleProject
|
|
{
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
public string Identifier { get; set; }
|
|
}
|
|
|
|
public class SimpleTracker
|
|
{
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
}
|
|
|
|
public class IssueItem
|
|
{
|
|
public string ProjectName { get; set; }
|
|
public string IssueName { get; set; }
|
|
public string IssueDescription { get; set; }
|
|
public int IssueNumber { get; set; }
|
|
public double SpentTime { get; set; }
|
|
public DateTime Created { get; set; }
|
|
public DateTime Updated { get; set; }
|
|
public string LastUpdate { get
|
|
{
|
|
var span = DateTime.Now - Updated;
|
|
|
|
if (span.TotalMinutes < 1) return "épp most";
|
|
if (span.TotalMinutes < 60) return $"{(int)span.TotalMinutes} perce";
|
|
if (span.TotalHours < 24) return $"{(int)span.TotalHours} órája";
|
|
if (span.TotalDays < 7) return $"{(int)span.TotalDays} napja";
|
|
if (span.TotalDays < 30) return $"{(int)(span.TotalDays / 7)} hete";
|
|
if (span.TotalDays < 365) return $"{(int)(span.TotalDays / 30)} hónapja";
|
|
|
|
return $"{(int)(span.TotalDays / 365)} éve";
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TimeEntryRequest
|
|
{
|
|
[JsonPropertyName("time_entry")]
|
|
public TimeEntry TimeEntry { get; set; }
|
|
}
|
|
|
|
public class TimeEntry
|
|
{
|
|
[JsonPropertyName("issue_id")]
|
|
public int IssueId { get; set; }
|
|
[JsonPropertyName("hours")]
|
|
public double Hours { get; set; }
|
|
[JsonPropertyName("comments")]
|
|
public string Comments { get; set; }
|
|
[JsonPropertyName("spent_on")]
|
|
public string SpentOn { get; set; }
|
|
[JsonPropertyName("activity_id")]
|
|
public int? ActivityId { get; set; }
|
|
}
|
|
|
|
public class IssueListResponse
|
|
{
|
|
[JsonPropertyName("issues")]
|
|
public List<IssueDto> Issues { get; set; }
|
|
[JsonPropertyName("total_count")]
|
|
public int TotalCount { get; set; }
|
|
[JsonPropertyName("limit")]
|
|
public int Limit { get; set; }
|
|
[JsonPropertyName("offset")]
|
|
public int Offset { get; set; }
|
|
}
|
|
|
|
public class CreateIssueResponse
|
|
{
|
|
[JsonPropertyName("issue")]
|
|
public IssueDto Issue { get; set; }
|
|
}
|
|
|
|
public class IssueDto
|
|
{
|
|
[JsonPropertyName("id")]
|
|
public int Id { get; set; }
|
|
[JsonPropertyName("project")]
|
|
public IdNameDto Project { get; set; }
|
|
[JsonPropertyName("subject")]
|
|
public string Subject { get; set; }
|
|
[JsonPropertyName("assigned_to")]
|
|
public AssignedToDto AssignedTo { get; set; }
|
|
[JsonPropertyName("description")]
|
|
public string Description { get; set; }
|
|
[JsonPropertyName("created_on")]
|
|
public DateTime Created { get; set; }
|
|
[JsonPropertyName("updated_on")]
|
|
public DateTime Updated { get; set; }
|
|
}
|
|
|
|
public class IdNameDto
|
|
{
|
|
[JsonPropertyName("name")]
|
|
public string Name { get; set; }
|
|
}
|
|
|
|
public class AssignedToDto
|
|
{
|
|
[JsonPropertyName("id")]
|
|
public int Id { get; set; }
|
|
}
|
|
|
|
public class TimeEntryListResponse
|
|
{
|
|
[JsonPropertyName("time_entries")]
|
|
public List<TimeEntryDto> TimeEntries { get; set; }
|
|
}
|
|
|
|
public class TimeEntryDto
|
|
{
|
|
[JsonPropertyName("hours")]
|
|
public double Hours { get; set; }
|
|
}
|
|
|
|
public class ProjectListResponse
|
|
{
|
|
[JsonPropertyName("projects")]
|
|
public List<ProjectDto> Projects { get; set; }
|
|
[JsonPropertyName("total_count")]
|
|
public int TotalCount { get; set; }
|
|
[JsonPropertyName("limit")]
|
|
public int Limit { get; set; }
|
|
[JsonPropertyName("offset")]
|
|
public int Offset { get; set; }
|
|
}
|
|
|
|
public class ProjectDto
|
|
{
|
|
[JsonPropertyName("id")]
|
|
public int Id { get; set; }
|
|
[JsonPropertyName("name")]
|
|
public string Name { get; set; }
|
|
[JsonPropertyName("identifier")]
|
|
public string Identifier { get; set; }
|
|
}
|
|
|
|
public class ProjectWithTrackersResponse
|
|
{
|
|
[JsonPropertyName("project")]
|
|
public ProjectWithTrackersDto Project { get; set; }
|
|
}
|
|
|
|
public class ProjectWithTrackersDto
|
|
{
|
|
[JsonPropertyName("trackers")]
|
|
public List<TrackerDto> Trackers { get; set; }
|
|
}
|
|
|
|
public class TrackerDto
|
|
{
|
|
[JsonPropertyName("id")]
|
|
public int Id { get; set; }
|
|
[JsonPropertyName("name")]
|
|
public string Name { get; set; }
|
|
}
|
|
}
|
|
}
|
|
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable.
|