Line data Source code
1 : package profile
2 :
3 : import (
4 : "time"
5 :
6 : "resume/internal/adapter/http/dto/response"
7 : "resume/internal/domain/entity"
8 : )
9 :
10 0 : func assembleUserOutput(user *entity.User) UserOutput {
11 0 : return UserOutput{User: user}
12 0 : }
13 :
14 : // ToUserIdentityRes は エンティティをレスポンスに変換するDTOです
15 0 : func ToUserIdentityRes(e *entity.UserIdentity) response.UserIdentity {
16 0 : return response.UserIdentity{
17 0 : ID: e.ID,
18 0 : UserID: e.UserID,
19 0 : Provider: e.Provider,
20 0 : ProviderUserID: e.ProviderUserID,
21 0 : ProviderDisplayName: e.ProviderDisplayName,
22 0 : EmailAtSignup: e.EmailAtSignup,
23 0 : CreatedAt: e.CreatedAt.Format(time.RFC3339),
24 0 : }
25 0 : }
26 :
27 : // ToUserIdentityResponses は 複数のエンティティをレスポンスに変換するDTOです
28 0 : func ToUserIdentityResponses(es []*entity.UserIdentity) []response.UserIdentity {
29 0 : out := make([]response.UserIdentity, 0, len(es))
30 0 : for _, e := range es {
31 0 : out = append(out, ToUserIdentityRes(e))
32 0 : }
33 0 : return out
34 : }
35 :
36 : // assembleHasAddressOutput は存在有無のプリミティブを出力 DTO に変換します。
37 0 : func assembleHasUserAddressOutput(exists bool) HasUserAddressOutput {
38 0 : return HasUserAddressOutput{
39 0 : Exists: exists,
40 0 : }
41 0 : }
42 :
43 0 : func addressPurposeKey(purposeID uint64) string {
44 0 : switch purposeID {
45 0 : case entity.AddressPurposeIDHome:
46 0 : return "master.addressPurpose.home"
47 0 : case entity.AddressPurposeIDContact:
48 0 : return "master.addressPurpose.contact"
49 0 : case entity.AddressPurposeIDOffice:
50 0 : return "master.addressPurpose.office"
51 0 : case entity.AddressPurposeIDShipping:
52 0 : return "master.addressPurpose.shipping"
53 0 : case entity.AddressPurposeIDBilling:
54 0 : return "master.addressPurpose.billing"
55 0 : default:
56 0 : return "master.addressPurpose.other"
57 : }
58 : }
59 :
60 : // ToUserAddressRes は エンティティをレスポンス DTO に変換する
61 0 : func ToUserAddressRes(e *entity.UserAddress) response.UserAddressResponse {
62 0 : return response.UserAddressResponse{
63 0 : ID: e.ID,
64 0 : UserID: e.UserID,
65 0 : PurposeID: e.PurposeID,
66 0 : PurposeKey: addressPurposeKey(uint64(e.PurposeID)),
67 0 : IsPrimary: e.IsPrimary,
68 0 : // Note: CountryCodeも多言語化対応した方が良いかも
69 0 : CountryCode: e.CountryCode,
70 0 : AdministrativeArea: e.AdministrativeArea,
71 0 : Locality: e.Locality,
72 0 : DependentLocality: e.DependentLocality,
73 0 : PostalCode: e.PostalCode,
74 0 : AddressLine1: e.AddressLine1,
75 0 : AddressLine2: e.AddressLine2,
76 0 : AddressLine3: e.AddressLine3,
77 0 : Latitude: e.Latitude,
78 0 : Longitude: e.Longitude,
79 0 : CreatedAt: e.CreatedAt,
80 0 : UpdatedAt: e.UpdatedAt,
81 0 : }
82 0 : }
83 :
84 : // ToUserAddressResponses は ユーザー住所エンティティ配列をレスポンス DTO 配列に変換します。
85 0 : func ToUserAddressResponses(es []*entity.UserAddress) []response.UserAddressResponse {
86 0 : out := make([]response.UserAddressResponse, 0, len(es))
87 0 : for _, e := range es {
88 0 : out = append(out, ToUserAddressRes(e))
89 0 : }
90 0 : return out
91 : }
|