/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { CreateJiraAccountDto } from '../models/CreateJiraAccountDto';
import type { CreateUserDto } from '../models/CreateUserDto';
import type { JiraAccount } from '../models/JiraAccount';
import type { UpdateJiraAccountDto } from '../models/UpdateJiraAccountDto';
import type { UpdateUserDto } from '../models/UpdateUserDto';
import type { User } from '../models/User';

import type { CancelablePromise } from '../core/CancelablePromise';
import { OpenAPI } from '../core/OpenAPI';
import { request as __request } from '../core/request';

export class UsersService {

    /**
     * Create a new user
     * @param requestBody
     * @returns User The user has been successfully created.
     * @throws ApiError
     */
    public static usersControllerCreate(
        requestBody: CreateUserDto,
    ): CancelablePromise<User> {
        return __request(OpenAPI, {
            method: 'POST',
            url: '/users',
            body: requestBody,
            mediaType: 'application/json',
            errors: {
                401: `Unauthorized.`,
            },
        });
    }

    /**
     * @returns User The users has been successfully retrieved.
     * @throws ApiError
     */
    public static usersControllerFindAll(): CancelablePromise<Array<User>> {
        return __request(OpenAPI, {
            method: 'GET',
            url: '/users',
            errors: {
                401: `Unauthorized.`,
            },
        });
    }

    /**
     * @param id
     * @param requestBody
     * @returns User The user has been successfully updated.
     * @throws ApiError
     */
    public static usersControllerUpdate(
        id: string,
        requestBody: UpdateUserDto,
    ): CancelablePromise<User> {
        return __request(OpenAPI, {
            method: 'PATCH',
            url: '/users/{id}',
            path: {
                'id': id,
            },
            body: requestBody,
            mediaType: 'application/json',
            errors: {
                401: `Unauthorized.`,
            },
        });
    }

    /**
     * Add a new jira account to a user
     * @param id
     * @param requestBody
     * @returns JiraAccount The jira account has been successfully created.
     * @throws ApiError
     */
    public static usersControllerAddJiraAccount(
        id: string,
        requestBody: CreateJiraAccountDto,
    ): CancelablePromise<JiraAccount> {
        return __request(OpenAPI, {
            method: 'POST',
            url: '/users/{id}/jira-accounts',
            path: {
                'id': id,
            },
            body: requestBody,
            mediaType: 'application/json',
            errors: {
                401: `Unauthorized.`,
            },
        });
    }

    /**
     * @param id
     * @returns JiraAccount The jira accounts has been successfully retrieved.
     * @throws ApiError
     */
    public static usersControllerGetJiraAccounts(
        id: string,
    ): CancelablePromise<Array<JiraAccount>> {
        return __request(OpenAPI, {
            method: 'GET',
            url: '/users/{id}/jira-accounts',
            path: {
                'id': id,
            },
            errors: {
                401: `Unauthorized.`,
            },
        });
    }

    /**
     * @param id
     * @param jiraAccountId
     * @param requestBody
     * @returns JiraAccount The jira account has been successfully updated.
     * @throws ApiError
     */
    public static usersControllerUpdateJiraAccount(
        id: string,
        jiraAccountId: string,
        requestBody: UpdateJiraAccountDto,
    ): CancelablePromise<JiraAccount> {
        return __request(OpenAPI, {
            method: 'PATCH',
            url: '/users/{id}/jira-accounts/{jiraAccountId}',
            path: {
                'id': id,
                'jiraAccountId': jiraAccountId,
            },
            body: requestBody,
            mediaType: 'application/json',
            errors: {
                401: `Unauthorized.`,
            },
        });
    }

}
