feat: mail composition
Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import { createFetchWrapper } from '@KTXC'
|
||||
import type { ApiRequest, ApiResponse } from '@MailManager/types/common'
|
||||
import type {
|
||||
CompositionAttachmentAddRequest,
|
||||
CompositionAttachmentAddResponse,
|
||||
CompositionAttachmentRemoveRequest,
|
||||
CompositionAttachmentRemoveResponse,
|
||||
CompositionDiscardRequest,
|
||||
CompositionDiscardResponse,
|
||||
CompositionPatchRequest,
|
||||
CompositionPatchResponse,
|
||||
CompositionSendRequest,
|
||||
CompositionSendResponse,
|
||||
CompositionStageRequest,
|
||||
CompositionStageResponse,
|
||||
} from '@/types/composition'
|
||||
|
||||
const fetchWrapper = createFetchWrapper()
|
||||
const API_URL = '/m/mail/compose/v1'
|
||||
const API_VERSION = 1
|
||||
|
||||
function generateTransactionId(): string {
|
||||
return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`
|
||||
}
|
||||
|
||||
async function post<TRequest, TResponse>(operation: string, data: TRequest): Promise<TResponse> {
|
||||
const request: ApiRequest<TRequest> = {
|
||||
version: API_VERSION,
|
||||
transaction: generateTransactionId(),
|
||||
operation,
|
||||
data,
|
||||
}
|
||||
|
||||
const response: ApiResponse<TResponse> = await fetchWrapper.post(API_URL, request)
|
||||
|
||||
if (response.status === 'error') {
|
||||
const errorMessage = `[${operation}] ${response.data.message}${response.data.code ? ` (code: ${response.data.code})` : ''}`
|
||||
throw new Error(errorMessage)
|
||||
}
|
||||
|
||||
return response.data
|
||||
}
|
||||
|
||||
const compositionService = {
|
||||
async stage(request: CompositionStageRequest): Promise<CompositionStageResponse> {
|
||||
return await post<CompositionStageRequest, CompositionStageResponse>('stage', request)
|
||||
},
|
||||
|
||||
async patch(request: CompositionPatchRequest): Promise<CompositionPatchResponse> {
|
||||
return await post<CompositionPatchRequest, CompositionPatchResponse>('patch', request)
|
||||
},
|
||||
|
||||
async discard(request: CompositionDiscardRequest): Promise<CompositionDiscardResponse> {
|
||||
return await post<CompositionDiscardRequest, CompositionDiscardResponse>('discard', request)
|
||||
},
|
||||
|
||||
async send(request: CompositionSendRequest): Promise<CompositionSendResponse> {
|
||||
return await post<CompositionSendRequest, CompositionSendResponse>('send', request)
|
||||
},
|
||||
|
||||
async attachmentAdd(request: CompositionAttachmentAddRequest): Promise<CompositionAttachmentAddResponse> {
|
||||
return await post<CompositionAttachmentAddRequest, CompositionAttachmentAddResponse>('attachment.add', request)
|
||||
},
|
||||
|
||||
async attachmentRemove(request: CompositionAttachmentRemoveRequest): Promise<CompositionAttachmentRemoveResponse> {
|
||||
return await post<CompositionAttachmentRemoveRequest, CompositionAttachmentRemoveResponse>('attachment.remove', request)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default compositionService
|
||||
Reference in New Issue
Block a user