task.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import type { Options, SearchParams, SearchResponse, SomeRequired, WithId } from './lib'
  2. import { request, writeSearchParams } from './lib'
  3. /** Task data. */
  4. export interface Task {
  5. /** Herd ID. */
  6. _herd: string
  7. /** Account ID reflecting the task assignee. */
  8. _account: string
  9. /** Description. */
  10. description: string
  11. /** Position in herd. */
  12. position: number
  13. /** Flag signifying whether the task is done. */
  14. done: boolean
  15. }
  16. /** Create task request data. */
  17. export interface CreateTaskRequest {
  18. task: SomeRequired<Task, '_herd' | '_account' | 'description'>
  19. }
  20. /** Create task response data. */
  21. export interface CreateTaskResponse {
  22. task: WithId<Task>
  23. }
  24. /** Delete task response data. */
  25. export interface DeleteTaskResponse {
  26. task: WithId<Task>
  27. }
  28. /** Get task response data. */
  29. export interface GetTaskResponse {
  30. task: WithId<Task>
  31. }
  32. /** Move task response data. */
  33. export interface MoveTaskResponse {
  34. task: WithId<Task>
  35. tasks: {
  36. affectedCount: number
  37. }
  38. }
  39. /** Toggle task done response data. */
  40. export interface ToggleTaskDoneResponse {
  41. task: WithId<Task>
  42. }
  43. /** Update task request data. */
  44. export interface UpdateTaskRequest {
  45. task: Partial<Task>
  46. }
  47. /** Update task response data. */
  48. export interface UpdateTaskResponse {
  49. task: WithId<Task>
  50. }
  51. /** Create a task. */
  52. export async function createTask(opt: Options, data: CreateTaskRequest): Promise<CreateTaskResponse> {
  53. return request(opt, 'POST', '/task', undefined, data)
  54. }
  55. /** Delete a task. */
  56. export async function deleteTask(opt: Options, id: string): Promise<DeleteTaskResponse> {
  57. return request(opt, 'DELETE', `/task/${id}`)
  58. }
  59. /** Get a task. */
  60. export async function getTask(opt: Options, id: string): Promise<GetTaskResponse> {
  61. return request(opt, 'GET', `/task/${id}`)
  62. }
  63. /** Move a task. */
  64. export async function moveTask(opt: Options, id: string, position: number): Promise<MoveTaskResponse> {
  65. return request(opt, 'PATCH', `/task/${id}/move/${position}`)
  66. }
  67. /** Search tasks. */
  68. export async function searchTasks(opt: Options, herd?: string, params?: SearchParams): Promise<SearchResponse<GetTaskResponse>> {
  69. return request(opt, 'GET', herd ? `/herd/${herd}/tasks` : '/tasks', params && writeSearchParams(params))
  70. }
  71. /** Toggle task done status. */
  72. export async function toggleTaskDone(opt: Options, id: string): Promise<ToggleTaskDoneResponse> {
  73. return request(opt, 'PATCH', `/task/${id}/done`)
  74. }
  75. /** Update a task. */
  76. export async function updateTask(opt: Options, id: string, data: UpdateTaskRequest): Promise<UpdateTaskResponse> {
  77. return request(opt, 'PUT', `/task/${id}`, undefined, data)
  78. }