From 83fe71c5410bae3236f668ac98fb9ecfaf7c1506 Mon Sep 17 00:00:00 2001
From: Nicolas Pagny <npagny@grandlyon.com>
Date: Wed, 11 Aug 2021 14:55:17 +0200
Subject: [PATCH] Created client db

---
 internal/client/client.go      | 37 ++++++++++++++++++++++++++++++++++
 internal/client/client_test.go | 34 +++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)
 create mode 100644 internal/client/client.go
 create mode 100644 internal/client/client_test.go

diff --git a/internal/client/client.go b/internal/client/client.go
new file mode 100644
index 0000000..2785f33
--- /dev/null
+++ b/internal/client/client.go
@@ -0,0 +1,37 @@
+package client
+
+import (
+	"gorm.io/driver/sqlite"
+	"gorm.io/gorm"
+)
+
+type Client struct {
+	gorm.Model
+	ID        uint `gorm:"primaryKey"`
+	Id_client string
+	Secret    string
+}
+
+var db *gorm.DB
+
+func Init() {
+	var err error
+	db, err = gorm.Open(sqlite.Open("glcpro.db"), &gorm.Config{})
+	if err != nil {
+		panic("failed to connect database")
+	}
+	//Migrate the schema
+	db.AutoMigrate(&Client{})
+}
+
+func Exists(id string, secret string) bool {
+	var client Client
+	if err := db.Where("id_client = ? AND secret = ?", id, secret).First(&client).Error; err != nil {
+		return false
+	}
+	return true
+}
+
+func Create(id string, secret string) {
+	db.Create(&Client{Id_client: id, Secret: secret})
+}
diff --git a/internal/client/client_test.go b/internal/client/client_test.go
new file mode 100644
index 0000000..e42dba1
--- /dev/null
+++ b/internal/client/client_test.go
@@ -0,0 +1,34 @@
+package client
+
+import (
+	"testing"
+)
+
+func TestExists(t *testing.T) {
+	Init()
+	db.Unscoped().Where("id_client = ?", "ID_CLIENT").Delete(Client{})
+	Create("ID_CLIENT", "SECRET")
+
+	type args struct {
+		id_client string
+		secret    string
+	}
+
+	tests := []struct {
+		name string
+		args args
+		want bool
+	}{
+		{"exists", args{id_client: "ID_CLIENT", secret: "SECRET"}, true},
+		{"not_exists_id_client", args{id_client: "NOTID_CLIENT", secret: "SECRET"}, false},
+		{"false_secret", args{id_client: "ID_CLIENT", secret: "WRONGSECRET"}, false},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			if got := Exists(tt.args.id_client, tt.args.secret); got != tt.want {
+				t.Errorf("Exists() = %v, want %v", got, tt.want)
+			}
+		})
+	}
+}
-- 
GitLab