Line data Source code
1 : // Package presenter は、ユースケースの出力データを HTTP レスポンス用 DTO に変換する責務を持ちます。
2 : // 主にドメインエンティティ(entity)を response パッケージの構造体へ詰め替え、
3 : // コントローラ層でそのまま JSON レスポンスとして返せる形式に整形します。
4 : package presenter
5 :
6 : import (
7 : "resume/internal/adapter/http/dto/response"
8 : "resume/internal/domain/entity"
9 : )
10 :
11 : // ToAddressResponse は、ドメインエンティティの UserAddress を
12 : // HTTP レスポンス用の Address DTO に変換します。
13 : // time.Time フィールドは JSON シリアライズ時に RFC3339 形式で出力されます。
14 0 : func ToAddressResponse(a *entity.UserAddress) response.Address {
15 0 : return response.Address{
16 0 : ID: a.ID,
17 0 : PurposeID: a.PurposeID,
18 0 : IsPrimary: a.IsPrimary,
19 0 : CountryCode: a.CountryCode,
20 0 : AdministrativeArea: a.AdministrativeArea,
21 0 : Locality: a.Locality,
22 0 : DependentLocality: a.DependentLocality,
23 0 : PostalCode: a.PostalCode,
24 0 : AddressLine1: a.AddressLine1,
25 0 : AddressLine2: a.AddressLine2,
26 0 : AddressLine3: a.AddressLine3,
27 0 : Latitude: a.Latitude,
28 0 : Longitude: a.Longitude,
29 0 : CreatedAt: a.CreatedAt, // time.Time の JSON は RFC3339 系で出ます
30 0 : UpdatedAt: a.UpdatedAt,
31 0 : }
32 0 : }
33 :
34 : // ToAddressListResponse は、UserAddress エンティティのスライスを
35 : // Address DTO のスライスに変換します。
36 : // 各要素は ToAddressResponse を用いて変換されます。
37 0 : func ToAddressListResponse(list []*entity.UserAddress) []response.Address {
38 0 : out := make([]response.Address, 0, len(list))
39 0 : for _, a := range list {
40 0 : out = append(out, ToAddressResponse(a))
41 0 : }
42 0 : return out
43 : }
|