initial commit
This commit is contained in:
96
app/provider.go
Normal file
96
app/provider.go
Normal 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()
|
||||
}
|
||||
Reference in New Issue
Block a user