HW12 изменил структуру проекта на более привычную
parent
5c07ac5193
commit
195c5ec84a
|
@ -1,11 +1,11 @@
|
||||||
[logger]
|
[Logger]
|
||||||
file = "./calendar.log"
|
File = "./calendar.log"
|
||||||
level = "INFO"
|
Level = "INFO"
|
||||||
|
|
||||||
[storage]
|
[Storage]
|
||||||
in_memory = false
|
inMemory = false
|
||||||
sql_host = "localhost"
|
SQLHost = "localhost"
|
||||||
sql_port = "5432"
|
SQLPort = "5432"
|
||||||
sql_dbase = "calendar"
|
SQLDbase = "calendar"
|
||||||
sql_user = "calendar"
|
SQLUser = "calendar"
|
||||||
sql_pass = "12345678"
|
SQLPass = "12345678"
|
|
@ -1,9 +1,10 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/BurntSushi/toml"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/BurntSushi/toml"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
@ -13,16 +14,16 @@ type Config struct {
|
||||||
MuteStdout bool
|
MuteStdout bool
|
||||||
}
|
}
|
||||||
Storage struct {
|
Storage struct {
|
||||||
In_memory bool
|
InMemory bool
|
||||||
Sql_host string
|
SQLHost string
|
||||||
Sql_port string
|
SQLPort string
|
||||||
Sql_dbase string
|
SQLDbase string
|
||||||
Sql_user string
|
SQLUser string
|
||||||
Sql_pass string
|
SQLPass string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Confita может быти и хороша, но она не возвращает ошибки, если не может распарсить файл в структуру. Мне не нравится такая "молчаливость"
|
// Confita может быти и хороша, но она не возвращает ошибки, если не может распарсить файл в структуру. Мне не нравится такая "молчаливость".
|
||||||
func NewConfig(configFile string) (Config, error) {
|
func NewConfig(configFile string) (Config, error) {
|
||||||
f, err := os.Open(configFile)
|
f, err := os.Open(configFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -32,8 +32,8 @@ V`)
|
||||||
}
|
}
|
||||||
defer os.Remove(goodfile.Name())
|
defer os.Remove(goodfile.Name())
|
||||||
goodfile.WriteString(`[storage]
|
goodfile.WriteString(`[storage]
|
||||||
in_memory = true
|
inMemory = true
|
||||||
sql_host = "localhost"`)
|
SQLHost = "localhost"`)
|
||||||
goodfile.Sync()
|
goodfile.Sync()
|
||||||
|
|
||||||
t.Run("No such file", func(t *testing.T) {
|
t.Run("No such file", func(t *testing.T) {
|
||||||
|
@ -50,8 +50,8 @@ sql_host = "localhost"`)
|
||||||
|
|
||||||
t.Run("TOML reading", func(t *testing.T) {
|
t.Run("TOML reading", func(t *testing.T) {
|
||||||
c, e := NewConfig(goodfile.Name())
|
c, e := NewConfig(goodfile.Name())
|
||||||
require.Equal(t, true, c.Storage.In_memory)
|
require.Equal(t, true, c.Storage.InMemory)
|
||||||
require.Equal(t, "localhost", c.Storage.Sql_host)
|
require.Equal(t, "localhost", c.Storage.SQLHost)
|
||||||
require.NoError(t, e)
|
require.NoError(t, e)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -2,19 +2,20 @@ package logger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
amitralog "github.com/amitrai48/logger"
|
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/config"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
amitralog "github.com/amitrai48/logger"
|
||||||
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Logger interface {
|
type Logger interface {
|
||||||
Debug(msg string)
|
Debugf(format string, args ...interface{})
|
||||||
Info(msg string)
|
Infof(format string, args ...interface{})
|
||||||
Warn(msg string)
|
Warnf(format string, args ...interface{})
|
||||||
Error(msg string)
|
Errorf(format string, args ...interface{})
|
||||||
Fatal(msg string)
|
Fatalf(format string, args ...interface{})
|
||||||
}
|
}
|
||||||
|
|
||||||
type Log struct {
|
type Log struct {
|
||||||
|
@ -22,7 +23,6 @@ type Log struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(conf config.Config) (Log, error) {
|
func New(conf config.Config) (Log, error) {
|
||||||
|
|
||||||
if conf.Logger.File == "" || !validLevel(conf.Logger.Level) {
|
if conf.Logger.File == "" || !validLevel(conf.Logger.Level) {
|
||||||
return Log{}, errors.New("invalid logger config")
|
return Log{}, errors.New("invalid logger config")
|
||||||
}
|
}
|
||||||
|
@ -44,23 +44,23 @@ func New(conf config.Config) (Log, error) {
|
||||||
return Log{Logger: l}, nil
|
return Log{Logger: l}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l Log) Debug(format string, args ...interface{}) {
|
func (l Log) Debugf(format string, args ...interface{}) {
|
||||||
l.Logger.Debugf(format, args)
|
l.Logger.Debugf(format, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Log) Info(format string, args ...interface{}) {
|
func (l *Log) Infof(format string, args ...interface{}) {
|
||||||
l.Logger.Infof(format, args)
|
l.Logger.Infof(format, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Log) Warn(format string, args ...interface{}) {
|
func (l *Log) Warnf(format string, args ...interface{}) {
|
||||||
l.Logger.Warnf(format, args)
|
l.Logger.Warnf(format, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Log) Error(format string, args ...interface{}) {
|
func (l *Log) Errorf(format string, args ...interface{}) {
|
||||||
l.Logger.Errorf(format, args)
|
l.Logger.Errorf(format, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Log) Fatal(format string, args ...interface{}) {
|
func (l *Log) Fatalf(format string, args ...interface{}) {
|
||||||
l.Logger.Fatalf(format, args)
|
l.Logger.Fatalf(format, args)
|
||||||
os.Exit(2)
|
os.Exit(2)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,8 +28,8 @@ func TestLoggerLogic(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("Messages arround the level", func(t *testing.T) {
|
t.Run("Messages arround the level", func(t *testing.T) {
|
||||||
log.Debug("debug message")
|
log.Debugf("debug message")
|
||||||
log.Error("error message")
|
log.Errorf("error message")
|
||||||
|
|
||||||
res, err := ioutil.ReadAll(tmpfile)
|
res, err := ioutil.ReadAll(tmpfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -2,14 +2,15 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
|
oslog "log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/app"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/app"
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/config"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/config"
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/logger"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/logger"
|
||||||
internalhttp "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/server/http"
|
internalhttp "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/server/http"
|
||||||
store "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage"
|
store "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage"
|
||||||
oslog "log"
|
|
||||||
"os"
|
|
||||||
"os/signal"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var configFile string
|
var configFile string
|
||||||
|
@ -47,12 +48,12 @@ func main() {
|
||||||
signal.Stop(signals)
|
signal.Stop(signals)
|
||||||
|
|
||||||
if err := server.Stop(); err != nil {
|
if err := server.Stop(); err != nil {
|
||||||
log.Error("failed to stop http server: " + err.Error())
|
log.Errorf("failed to stop http server: " + err.Error())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if err := server.Start(); err != nil {
|
if err := server.Start(); err != nil {
|
||||||
log.Error("failed to start http server: " + err.Error())
|
log.Errorf("failed to start http server: " + err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
package internalhttp
|
package internalhttp
|
||||||
|
|
||||||
import (
|
//func loggingMiddleware(next http.Handler) http.Handler {
|
||||||
"net/http"
|
// return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
)
|
|
||||||
|
|
||||||
func loggingMiddleware(next http.Handler) http.Handler {
|
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
// TODO
|
// TODO
|
||||||
})
|
// })
|
||||||
}
|
//}
|
||||||
|
|
|
@ -2,34 +2,33 @@ package memorystorage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage/event"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage/event"
|
||||||
"sync"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Storage struct {
|
type Storage struct {
|
||||||
events []event.Event
|
//events []event.Event
|
||||||
mu sync.RWMutex
|
//mu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() *Storage {
|
func New() *Storage {
|
||||||
return &Storage{}
|
return &Storage{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Save(event event.Event) error {
|
func (s *Storage) Save(event event.Event) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Update(event event.Event) error {
|
func (s *Storage) Update(event event.Event) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Delete(event event.Event) error {
|
func (s *Storage) Delete(event event.Event) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) List() []event.Event {
|
func (s *Storage) List() []event.Event {
|
||||||
return []event.Event{}
|
return []event.Event{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Get(id string) (event.Event, bool) {
|
func (s *Storage) Get(id string) (event.Event, bool) {
|
||||||
return event.Event{}, false
|
return event.Event{}, false
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,9 @@ package sqlstorage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage/event"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Storage struct {
|
type Storage struct {
|
||||||
|
@ -25,7 +26,7 @@ func (s *Storage) Close(ctx context.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Save(e event.Event) error {
|
func (s *Storage) Save(e event.Event) error {
|
||||||
if _, ok := s.Get(e.ID); !ok {
|
if _, ok := s.Get(e.ID); !ok {
|
||||||
s.Mu.Lock()
|
s.Mu.Lock()
|
||||||
s.Events = append(s.Events, e)
|
s.Events = append(s.Events, e)
|
||||||
|
@ -34,18 +35,18 @@ func (s Storage) Save(e event.Event) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Update(event event.Event) error {
|
func (s *Storage) Update(event event.Event) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Delete(event event.Event) error {
|
func (s *Storage) Delete(event event.Event) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) List() []event.Event {
|
func (s *Storage) List() []event.Event {
|
||||||
return []event.Event{}
|
return []event.Event{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Storage) Get(id string) (event.Event, bool) {
|
func (s *Storage) Get(id string) (event.Event, bool) {
|
||||||
return event.Event{}, false
|
return event.Event{}, false
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
sqlstorage "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage/sql"
|
sqlstorage "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/src/storage/sql"
|
||||||
)
|
)
|
||||||
|
|
||||||
type StoreInterface interface {
|
type Interface interface {
|
||||||
Save(event event.Event) error
|
Save(event event.Event) error
|
||||||
Update(event event.Event) error
|
Update(event event.Event) error
|
||||||
Delete(event event.Event) error
|
Delete(event event.Event) error
|
||||||
|
@ -15,8 +15,8 @@ type StoreInterface interface {
|
||||||
Get(id string) (event.Event, bool)
|
Get(id string) (event.Event, bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStore(config config.Config) StoreInterface {
|
func NewStore(config config.Config) Interface {
|
||||||
if config.Storage.In_memory {
|
if config.Storage.InMemory {
|
||||||
st := memorystorage.New()
|
st := memorystorage.New()
|
||||||
return st
|
return st
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue