Skip to content

Commit 1897acd

Browse files
committed
Add delete address and test
1 parent b45933d commit 1897acd

File tree

4 files changed

+70
-0
lines changed

4 files changed

+70
-0
lines changed

src/action/address/delete-address.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Address, User } from "@prisma/client";
2+
import GetAddress from "./get-address";
3+
import { prismaClient } from "../../application/database";
4+
5+
export default class DeleteAddress {
6+
static async execute(user: User, addressId: bigint, contactId: bigint): Promise<Address> {
7+
const address = await GetAddress.execute(user, addressId, contactId)
8+
9+
const deletedAddress = await prismaClient.address.delete({
10+
where: {
11+
id: address.id
12+
}
13+
})
14+
15+
return deletedAddress
16+
}
17+
}

src/controller/address-controller.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import UserRequest from '../request/user-request'
44
import { CreateAddressRequest, toAddressResponse } from '../model/address-model'
55
import GetAddress from '../action/address/get-address'
66
import UpdateAddress from '../action/address/update-address'
7+
import DeleteAddress from '../action/address/delete-address'
78

89
export default class AddressController {
910
static async create(req: UserRequest, res: Response, next: NextFunction) {
@@ -49,4 +50,18 @@ export default class AddressController {
4950
next(e)
5051
}
5152
}
53+
54+
static async delete(req: UserRequest, res: Response, next: NextFunction) {
55+
try {
56+
const addressId = BigInt(req.params.addressId)
57+
58+
const contactId = BigInt(req.params.contactId)
59+
60+
const response = await DeleteAddress.execute(req.user !, addressId, contactId)
61+
62+
res.json(toAddressResponse(response)).status(200)
63+
} catch (e: unknown) {
64+
next(e)
65+
}
66+
}
5267
}

src/route/api.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,8 @@ apiRouter.put(
2626
'/api/contacts/:contactId/addresses/:addressId',
2727
AddressController.update
2828
)
29+
30+
apiRouter.delete(
31+
'/api/contacts/:contactId/addresses/:addressId',
32+
AddressController.delete
33+
)

tests/address.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,36 @@ describe('PUT /api/contacts/:contactId/addresses/:addressId', () => {
228228
expect(body.data.postal_code).toBe(request.postal_code)
229229
})
230230
})
231+
232+
describe('DELETE: /api/contacts/:contactId/addresses/:addressId', () => {
233+
it('can delete contact with specific id', async () => {
234+
const user = await createUser()
235+
236+
const contact = await createContact(user)
237+
238+
const address = await createAddress(user, contact)
239+
240+
const response = await supertest(web)
241+
.delete(`/api/contacts/${contact.id}/addresses/${address.id}`)
242+
.set('X-API-TOKEN', user.token!)
243+
.send()
244+
245+
const body: Response<AddressResponse> = response.body
246+
247+
expect(response.status).toBe(200)
248+
expect(BigInt(body.data.id)).toBe(address.id)
249+
})
250+
251+
it('cant delete contact with incorrect id', async () => {
252+
const user = await createUser()
253+
254+
const contact = await createContact(user)
255+
256+
const response = await supertest(web)
257+
.delete(`/api/contacts/${contact.id}/addresses/0`)
258+
.set('X-API-TOKEN', user.token!)
259+
.send()
260+
261+
expect(response.status).toBe(404)
262+
})
263+
})

0 commit comments

Comments
 (0)