-
Notifications
You must be signed in to change notification settings - Fork 0
/
contactcommunicationmethodfield.go
162 lines (135 loc) · 5.94 KB
/
contactcommunicationmethodfield.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package contactcommunicationmethodfield
import (
"context"
"database/sql"
"github.com/bungysheep/contact-management/pkg/common/message"
contactcommunicationmethodfieldmodel "github.com/bungysheep/contact-management/pkg/models/v1/contactcommunicationmethodfield"
messagemodel "github.com/bungysheep/contact-management/pkg/models/v1/message"
)
// IContactCommunicationMethodFieldRepository - Contact Communication Method Field repository interface
type IContactCommunicationMethodFieldRepository interface {
DoRead(context.Context, string, int64, int64) ([]*contactcommunicationmethodfieldmodel.ContactCommunicationMethodField, messagemodel.IMessage)
DoInsert(context.Context, *contactcommunicationmethodfieldmodel.ContactCommunicationMethodField) messagemodel.IMessage
DoUpdate(context.Context, *contactcommunicationmethodfieldmodel.ContactCommunicationMethodField) messagemodel.IMessage
DoDelete(context.Context, string, int64, int64) messagemodel.IMessage
}
type contactCommunicationMethodFieldRepository struct {
db *sql.DB
}
// NewContactCommunicationMethodFieldRepository - Contact Communication Method Field repository implementation
func NewContactCommunicationMethodFieldRepository(db *sql.DB) IContactCommunicationMethodFieldRepository {
return &contactCommunicationMethodFieldRepository{db: db}
}
func (cm *contactCommunicationMethodFieldRepository) DoRead(ctx context.Context, contactSystemCode string, contactID int64, contactCommunicationMethodID int64) ([]*contactcommunicationmethodfieldmodel.ContactCommunicationMethodField, messagemodel.IMessage) {
result := make([]*contactcommunicationmethodfieldmodel.ContactCommunicationMethodField, 0)
conn, err := cm.db.Conn(ctx)
if err != nil {
return result, message.FailedConnectToDatabase(err)
}
defer conn.Close()
stmt, err := conn.PrepareContext(ctx,
`SELECT contact_system_code, contact_id, contact_communication_method_id, field_code, field_value
FROM contact_communication_method_field
WHERE contact_system_code=$1
AND contact_id=$2
AND contact_communication_method_id=$3`)
if err != nil {
return result, message.FailedPrepareRead("Contact Communication Method Fields", err)
}
rows, err := stmt.QueryContext(ctx, contactSystemCode, contactID, contactCommunicationMethodID)
if err != nil {
return result, message.FailedRead("Contact Communication Method Fields", err)
}
defer rows.Close()
for {
if !rows.Next() {
if err := rows.Err(); err != nil {
return result, message.FailedRetrieveRow("Contact Communication Method Field", err)
}
if len(result) == 0 {
return result, message.DoesNotExist("Contact Communication Method Field")
}
break
}
contactCommunicationMethodField := contactcommunicationmethodfieldmodel.NewContactCommunicationMethodField()
if err := rows.Scan(
&contactCommunicationMethodField.ContactSystemCode,
&contactCommunicationMethodField.ContactID,
&contactCommunicationMethodField.ContactCommunicationMethodID,
&contactCommunicationMethodField.FieldCode,
&contactCommunicationMethodField.FieldValue); err != nil {
return result, message.FailedRetrieveValues("Contact Communication Method Field", err)
}
result = append(result, contactCommunicationMethodField)
}
return result, nil
}
func (cm *contactCommunicationMethodFieldRepository) DoInsert(ctx context.Context, data *contactcommunicationmethodfieldmodel.ContactCommunicationMethodField) messagemodel.IMessage {
conn, err := cm.db.Conn(ctx)
if err != nil {
return message.FailedConnectToDatabase(err)
}
defer conn.Close()
stmt, err := conn.PrepareContext(ctx,
`INSERT INTO contact_communication_method_field
(contact_system_code, contact_id, contact_communication_method_id, field_code, field_value)
VALUES ($1, $2, $3, $4, $5)`)
if err != nil {
return message.FailedPrepareInsert("Contact Communication Method Field", err)
}
result, err := stmt.ExecContext(ctx, data.GetContactSystemCode(), data.GetContactID(), data.GetContactCommunicationMethodID(), data.GetFieldCode(), data.GetFieldValue())
if err != nil {
return message.FailedInsert("Contact Communication Method Field", err)
}
rows, _ := result.RowsAffected()
if rows == 0 {
return message.NoRowInserted()
}
return nil
}
func (cm *contactCommunicationMethodFieldRepository) DoUpdate(ctx context.Context, data *contactcommunicationmethodfieldmodel.ContactCommunicationMethodField) messagemodel.IMessage {
conn, err := cm.db.Conn(ctx)
if err != nil {
return message.FailedConnectToDatabase(err)
}
defer conn.Close()
stmt, err := conn.PrepareContext(ctx,
`UPDATE contact_communication_method_field
SET field_value=$5
WHERE contact_system_code=$1
AND contact_id=$2
AND contact_communication_method_id=$3
AND field_code=$4`)
if err != nil {
return message.FailedPrepareUpdate("Contact Communication Method Field", err)
}
result, err := stmt.ExecContext(ctx, data.GetContactSystemCode(), data.GetContactID(), data.GetContactCommunicationMethodID(), data.GetFieldCode(), data.GetFieldValue())
if err != nil {
return message.FailedUpdate("Contact Communication Method", err)
}
rows, _ := result.RowsAffected()
if rows == 0 {
return message.DoesNotExist("Contact Communication Method Field")
}
return nil
}
func (cm *contactCommunicationMethodFieldRepository) DoDelete(ctx context.Context, contactSystemCode string, contactID int64, contactCommunicationMethodID int64) messagemodel.IMessage {
conn, err := cm.db.Conn(ctx)
if err != nil {
return message.FailedConnectToDatabase(err)
}
defer conn.Close()
stmt, err := conn.PrepareContext(ctx,
`DELETE FROM contact_communication_method_field
WHERE contact_system_code=$1
AND contact_id=$2
AND contact_communication_method_id=$3`)
if err != nil {
return message.FailedPrepareDelete("All Contact Communication Method Fields", err)
}
_, err = stmt.ExecContext(ctx, contactSystemCode, contactID, contactCommunicationMethodID)
if err != nil {
return message.FailedDelete("All Contact Communication Method Fields", err)
}
return nil
}