public async Task CreateIssue()

in src/YouTrackSharp/Issues/IssuesService.cs [86:156]


        public async Task<string> CreateIssue(string projectId, Issue issue)
        {
            if (string.IsNullOrEmpty(projectId))
            {
                throw new ArgumentNullException(nameof(projectId));
            }

            var apiIssue = new Generated.Issue
            {
                Project = new Project() {ShortName = projectId}
            };
            
            if (!string.IsNullOrEmpty(issue.Summary))
            {
                apiIssue.Summary = issue.Summary;
            }
            if (!string.IsNullOrEmpty(issue.Description))
            {
                apiIssue.Description = issue.Description;
            }
            
            var client = await _connection.GetAuthenticatedApiClient();
            
            // Create and immediately update issue draft
            var draft = await client.UsersMeDraftsAsync("id", new object());
            draft = await client.IssuesPostAsync(draft.Id, false, "id", apiIssue);
            var draftId = draft.Id;

            // For every custom field, apply a command
            var customFields = issue.Fields
                .Where(field => !ReservedFields.Contains(field.Name.ToLower()))
                .ToDictionary(field => field.Name, field => field.Value);
            
            foreach (var customField in customFields)
            {
                if (!(customField.Value is string) && customField.Value is System.Collections.IEnumerable enumerable)
                {
                    await ApplyCommand(draftId, $"{customField.Key} {string.Join(" ", enumerable.OfType<string>())}", string.Empty);
                }
                else switch (customField.Value)
                {
                    case DateTime dateTime:
                        await ApplyCommand(draftId, $"{customField.Key} {dateTime:s}", string.Empty);
                        break;
                    case DateTimeOffset dateTimeOffset:
                        await ApplyCommand(draftId, $"{customField.Key} {dateTimeOffset:s}", string.Empty);
                        break;
                    default:
                        await ApplyCommand(draftId, $"{customField.Key} {customField.Value}", string.Empty);
                        break;
                }
            }
            
            var response = await client.IssuesPostAsync__FromDraft(draftId, false, "id,idReadable", apiIssue);
            var issueId = response.Id;
            var issueIdReadable = response.IdReadable;
            
            // Add comments?
            foreach (var issueComment in issue.Comments)
            {
                await ApplyCommand(issueId, "comment", issueComment.Text, runAs: issueComment.Author);
            }
            
            // Add tags?
            foreach (var issueTag in issue.Tags)
            {
                await ApplyCommand(issueId, $"tag {issueTag.Value}");
            }
            
            return issueIdReadable;
        }