Первый прототип с основными возможностями

This commit is contained in:
2024-07-31 07:58:22 +03:00
parent 423cff473f
commit cf036565c4
41 changed files with 6969 additions and 2 deletions

38
services/key.go Normal file
View File

@@ -0,0 +1,38 @@
package services
import (
"context"
"math/rand"
"time"
"code.gurenya.net/carlsmei/muninn-aio/db"
"code.gurenya.net/carlsmei/muninn-aio/ent/link"
)
// Key Generation Algorithm 6:51 MSK 29.07.24
var numChars = 8
var keyAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
var seededRand *rand.Rand = rand.New(
rand.NewSource(time.Now().UnixNano()))
func GenerateKey(ctx context.Context) string {
client := db.GetEntClient()
cond := false
key := make([]byte, numChars)
for !cond {
for i := range key {
key[i] = keyAlphabet[seededRand.Intn(len(keyAlphabet))]
}
exists, _ := client.Link.
Query().
Where(link.Key(string(key))).
Exist(ctx)
cond = !exists
}
return string(key)
}

44
services/link.go Normal file
View File

@@ -0,0 +1,44 @@
package services
import (
"context"
"code.gurenya.net/carlsmei/muninn-aio/db"
"code.gurenya.net/carlsmei/muninn-aio/ent"
"code.gurenya.net/carlsmei/muninn-aio/ent/link"
)
func CreateLink(ctx context.Context, user *ent.User, original_url string, key string) (*ent.Link, error) {
client := db.GetEntClient()
if key == "" {
key = GenerateKey(ctx)
}
link, err := client.Link.Create().
AddOwner(user).
SetKey(key).
SetOriginalURL(original_url).
Save(ctx)
if err != nil {
return nil, err
}
return link, nil
}
func GetLinkByKey(ctx context.Context, key string) (*ent.Link, error) {
client := db.GetEntClient()
link, err := client.Link.
Query().
Where(link.Key(key)).
Only(ctx)
if err != nil {
return nil, err
}
return link, nil
}

40
services/user.go Normal file
View File

@@ -0,0 +1,40 @@
package services
import (
"context"
"code.gurenya.net/carlsmei/muninn-aio/db"
"code.gurenya.net/carlsmei/muninn-aio/ent"
"code.gurenya.net/carlsmei/muninn-aio/ent/user"
)
func GetOrCreateUser(ctx context.Context, telegram_id int64) (*ent.User, error) {
client := db.GetEntClient()
// fmt.Printf("GetOrCreateUser(context, %d)\n", telegram_id)
user, err := client.User.Query().
Where(user.TelegramID(telegram_id)).
Only(ctx)
if err != nil {
if ent.IsNotFound(err) {
// fmt.Printf("user not found - creating user with telegram id %d\n", telegram_id)
} else {
return nil, err
}
} else {
return user, nil
}
user, err = client.User.Create().
SetTelegramID(telegram_id).
Save(ctx)
if err != nil {
return nil, err
}
// fmt.Printf("user created with telegram id %d\n", telegram_id)
return user, nil
}