11import axios , { AxiosInstance , AxiosResponse } from "axios" ;
22import { BaseClient , ClientConfig } from "../../common/client" ;
3- import { axiosRequestConfig , PortfolioRequest } from "../../common/request" ;
3+ import {
4+ PortfolioRequest ,
5+ RequestWithBody ,
6+ RequestWithParameters ,
7+ } from "../../common/request" ;
48import { PortfolioResponse } from "../../common/response" ;
5- import { ContactMessage , Reason , Sender } from "./models" ;
6-
7- export type CreateContactMessageRequest = PortfolioRequest <
8- CreateContactMessageForm
9- > ;
9+ import {
10+ ContactMessage ,
11+ ContactMessageCollection ,
12+ Reason ,
13+ Sender ,
14+ } from "./models" ;
1015
1116export interface CreateContactMessageForm {
1217 message : string ;
1318 reason : Reason ;
1419 sender : Sender ;
1520}
1621
22+ export type CreateContactMessageRequest = RequestWithBody <
23+ CreateContactMessageForm
24+ > ;
25+
26+ export interface GetContactMessageRequest extends PortfolioRequest {
27+ id : string ;
28+ }
29+
30+ export interface GetContactMessageQueryParameters {
31+ reason ?: Reason ;
32+ archived ?: boolean ;
33+ responded ?: boolean ;
34+ }
35+
36+ export type GetContactMessagesRequest = RequestWithParameters <
37+ GetContactMessageQueryParameters
38+ > ;
39+
1740export type ContactMessageResponse = PortfolioResponse < ContactMessage > ;
1841
42+ export type ContactMessagesResponse = PortfolioResponse <
43+ ContactMessageCollection
44+ > ;
45+
46+ /**
47+ * Client used to interface with contact API
48+ */
1949export class ContactClient extends BaseClient {
2050 constructor ( config : ClientConfig , axiosInstance : AxiosInstance = axios ) {
2151 super ( config , axiosInstance ) ;
@@ -29,13 +59,44 @@ export class ContactClient extends BaseClient {
2959 createMessage (
3060 request : CreateContactMessageRequest
3161 ) : Promise < AxiosResponse < ContactMessageResponse > > {
32- const url = `${ this . config . host } /contact/mail` ;
33- const config = axiosRequestConfig ( request ) ;
34-
35- return this . axiosInstance . post < ContactMessageResponse > (
36- url ,
37- request . body ,
38- config
39- ) ;
62+ const config = this . config . merge ( request as PortfolioRequest ) ;
63+ const url = `${ config . host } /contact/mail` ;
64+
65+ return this . axiosInstance . post < ContactMessageResponse > ( url , request . body , {
66+ headers : config . headers ,
67+ } ) ;
68+ }
69+
70+ /**
71+ * Retrieves a specific contact message by id
72+ *
73+ * @param request
74+ */
75+ findMessage (
76+ request : GetContactMessageRequest
77+ ) : Promise < AxiosResponse < ContactMessageResponse > > {
78+ const config = this . config . merge ( request as PortfolioRequest ) ;
79+ const url = `${ config . host } /contact/mail/${ request . id } ` ;
80+
81+ return this . axiosInstance . get < ContactMessageResponse > ( url , {
82+ headers : config . headers ,
83+ } ) ;
84+ }
85+
86+ /**
87+ * Retrieves multiple contact messages
88+ *
89+ * @param request
90+ */
91+ findMessages (
92+ request ?: GetContactMessagesRequest
93+ ) : Promise < AxiosResponse < ContactMessagesResponse > > {
94+ const config = this . config . merge ( request as PortfolioRequest ) ;
95+ const url = `${ config . host } /contact/mail` ;
96+
97+ return this . axiosInstance . get < ContactMessagesResponse > ( url , {
98+ params : request !== undefined ? request . queryParameters : { } ,
99+ headers : config . headers ,
100+ } ) ;
40101 }
41102}
0 commit comments