initial commit

This commit is contained in:
2026-02-27 13:23:16 +03:00
commit 3701af1fd7
12 changed files with 512 additions and 0 deletions

96
app/provider.go Normal file
View File

@@ -0,0 +1,96 @@
package app
import (
"encoding/json"
"errors"
"os"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
}
type Provider struct {
Users []User `json:"users"`
LastUserID int `json:"last_user_id"`
path string
}
// NewProvider создаёт новый провайдер с пустыми данными (файл не трогает)
func NewProvider() *Provider {
return &Provider{
Users: make([]User, 0),
LastUserID: 0,
path: "./provider.json",
}
}
// LoadProvider загружает данные из файла, если файла нет — возвращает новый провайдер
func LoadProvider() (*Provider, error) {
data, err := os.ReadFile("./provider.json")
if err != nil {
if os.IsNotExist(err) {
// файл не существует, возвращаем новый провайдер
return NewProvider(), nil
}
return nil, err
}
p := &Provider{path: "./provider.json"}
if err := json.Unmarshal(data, p); err != nil {
return nil, err
}
return p, nil
}
// Save сохраняет текущее состояние в файл
func (p *Provider) Save() error {
data, err := json.MarshalIndent(p, "", " ") // для читаемости
if err != nil {
return err
}
return os.WriteFile(p.path, data, 0644)
}
func (p *Provider) AddUser(username, password string) error {
p.LastUserID++
p.Users = append(p.Users, User{
ID: p.LastUserID,
Username: username,
Password: password,
})
return p.Save()
}
func (p *Provider) GetById(id int) (User, error) {
for _, user := range p.Users {
if user.ID == id {
return user, nil
}
}
return User{}, errors.New("user not found")
}
func (p *Provider) GetUser(password string) (User, error) {
for _, user := range p.Users {
if user.Password == password {
return user, nil
}
}
return User{}, errors.New("user not found")
}
func (p *Provider) DeleteUser(id int) error {
index := -1
for i, user := range p.Users {
if user.ID == id {
index = i
break
}
}
if index == -1 {
return errors.New("user not found")
}
p.Users = append(p.Users[:index], p.Users[index+1:]...)
return p.Save()
}