-
Notifications
You must be signed in to change notification settings - Fork 1
/
project_data_store.go
46 lines (37 loc) · 1.13 KB
/
project_data_store.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
package infrastructure
import (
"context"
"fmt"
"os"
"github.com/shintaro-uchiyama/slack-suite/functions/slack_event/domain"
"cloud.google.com/go/datastore"
)
var _ domain.ProjectDataStoreInterface = (*ProjectDataStore)(nil)
const projectDataStoreKey = "Project"
type ProjectDataStore struct {
client *datastore.Client
}
func NewProjectDataStore() (*ProjectDataStore, error) {
ctx := context.Background()
client, err := datastore.NewClient(ctx, os.Getenv("PROJECT_ID"))
if err != nil {
return nil, fmt.Errorf("project datastore NewClient error: %w", err)
}
return &ProjectDataStore{
client: client,
}, nil
}
type ProjectEntity struct {
ProjectID int `datastore:",noindex"`
WorkspaceID int `datastore:",noindex"`
}
func (d ProjectDataStore) GetByChannel(channel string) (domain.Project, error) {
ctx := context.Background()
key := datastore.NameKey(projectDataStoreKey, channel, nil)
var project ProjectEntity
err := d.client.Get(ctx, key, &project)
if err != nil {
return domain.Project{}, fmt.Errorf("get datastore error: %w", err)
}
return *domain.NewProject(project.ProjectID, channel, project.WorkspaceID), nil
}