add options , config
This commit is contained in:
parent
80e5f0b19c
commit
fe884e6931
@ -0,0 +1,6 @@
|
||||
database:
|
||||
user: postgres
|
||||
password: ""
|
||||
host: localhost
|
||||
port: 5432
|
||||
dbname: gallery
|
10
main.go
10
main.go
@ -4,18 +4,28 @@ import (
|
||||
"log"
|
||||
|
||||
"git.trj.tw/golang/go-gallery/models"
|
||||
"git.trj.tw/golang/go-gallery/modules/config"
|
||||
"git.trj.tw/golang/go-gallery/modules/memstore"
|
||||
"git.trj.tw/golang/go-gallery/modules/options"
|
||||
"git.trj.tw/golang/go-gallery/routers/routes"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
var server *gin.Engine
|
||||
|
||||
func init() {
|
||||
options.RegFlag()
|
||||
}
|
||||
|
||||
func main() {
|
||||
err := memstore.InitClient()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = config.LoadConfig()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
server = routes.NewServ()
|
||||
x, err := models.NewDB()
|
||||
defer x.Close()
|
||||
|
@ -2,7 +2,9 @@ package models
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
"git.trj.tw/golang/go-gallery/modules/config"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
@ -11,6 +13,8 @@ var x *sql.DB
|
||||
// NewDB - db object
|
||||
func NewDB() (*sql.DB, error) {
|
||||
var err error
|
||||
x, err = sql.Open("postgres", "user=postgres host=localhost sslmode=disable dbname=gallery")
|
||||
conf := config.GetConf()
|
||||
connStr := fmt.Sprintf("user=%s host=%s sslmode=disable dbname=%s port=%d", conf.Database.User, conf.Database.Host, conf.Database.DBName, conf.Database.Port)
|
||||
x, err = sql.Open("postgres", connStr)
|
||||
return x, err
|
||||
}
|
||||
|
@ -1,4 +1,66 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
|
||||
"git.trj.tw/golang/go-gallery/modules/utils"
|
||||
)
|
||||
|
||||
// Config struct
|
||||
type Config struct {
|
||||
Database struct {
|
||||
User string `yaml:"user"`
|
||||
Password string `yaml:"password"`
|
||||
Host string `yaml:"host"`
|
||||
Port int `yaml:"port"`
|
||||
DBName string `yaml:"dbname"`
|
||||
} `yaml:"database"`
|
||||
}
|
||||
|
||||
var (
|
||||
conf *Config
|
||||
)
|
||||
|
||||
// LoadConfig from config file
|
||||
func LoadConfig(p ...string) error {
|
||||
var fp string
|
||||
if len(p) > 0 && len(p[0]) > 0 {
|
||||
fp = p[0]
|
||||
} else {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fp = path.Join(wd, "config.yml")
|
||||
}
|
||||
|
||||
fp = utils.ParsePath(fp)
|
||||
|
||||
exists := utils.CheckExists(fp, false)
|
||||
if !exists {
|
||||
return errors.New("config file not exists")
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadFile(fp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
conf = &Config{}
|
||||
err = yaml.Unmarshal(data, conf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetConf get config
|
||||
func GetConf() *Config {
|
||||
return conf
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package middleware
|
||||
import (
|
||||
"git.trj.tw/golang/go-gallery/models"
|
||||
"git.trj.tw/golang/go-gallery/modules/context"
|
||||
"git.trj.tw/golang/go-gallery/modules/utils"
|
||||
)
|
||||
|
||||
// GetAlbumToNext -
|
||||
@ -30,8 +29,8 @@ func GetAlbumToNext(c *context.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
albumMap := utils.ToMap(album)
|
||||
c.Set("album", albumMap)
|
||||
// albumMap := utils.ToMap(album)
|
||||
c.Set("album", album)
|
||||
|
||||
c.Next()
|
||||
}
|
||||
|
25
modules/options/options.go
Normal file
25
modules/options/options.go
Normal file
@ -0,0 +1,25 @@
|
||||
package options
|
||||
|
||||
import (
|
||||
"flag"
|
||||
)
|
||||
|
||||
// Options -
|
||||
type Options struct {
|
||||
Config string
|
||||
}
|
||||
|
||||
var (
|
||||
opts *Options
|
||||
)
|
||||
|
||||
// RegFlag -
|
||||
func RegFlag() {
|
||||
opts = &Options{}
|
||||
flag.StringVar(&opts.Config, "c", "", "config `file path`")
|
||||
}
|
||||
|
||||
// GetOpts -
|
||||
func GetOpts() *Options {
|
||||
return opts
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ToMap struct to map[string]interface{}
|
||||
@ -30,3 +34,51 @@ func ToMap(ss interface{}) map[string]interface{} {
|
||||
|
||||
return smap
|
||||
}
|
||||
|
||||
// ParsePath - parse file path to absPath
|
||||
func ParsePath(dst string) string {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
wd = ""
|
||||
}
|
||||
|
||||
if []rune(dst)[0] == '~' {
|
||||
home := UserHomeDir()
|
||||
if len(home) > 0 {
|
||||
dst = strings.Replace(dst, "~", home, -1)
|
||||
}
|
||||
}
|
||||
|
||||
if path.IsAbs(dst) {
|
||||
dst = path.Clean(dst)
|
||||
return dst
|
||||
}
|
||||
|
||||
str := path.Join(wd, dst)
|
||||
str = path.Clean(str)
|
||||
return str
|
||||
}
|
||||
|
||||
// UserHomeDir - get user home directory
|
||||
func UserHomeDir() string {
|
||||
env := "HOME"
|
||||
if runtime.GOOS == "windows" {
|
||||
env = "USERPROFILE"
|
||||
} else if runtime.GOOS == "plan9" {
|
||||
env = "home"
|
||||
}
|
||||
return os.Getenv(env)
|
||||
}
|
||||
|
||||
// CheckExists - check file exists
|
||||
func CheckExists(filePath string, allowDir bool) bool {
|
||||
filePath = ParsePath(filePath)
|
||||
stat, err := os.Stat(filePath)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
return false
|
||||
}
|
||||
if !allowDir && stat.IsDir() {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ func GetAllAlbums(c *context.Context) {
|
||||
|
||||
// GetAlbum -
|
||||
func GetAlbum(c *context.Context) {
|
||||
id := c.Param("id")
|
||||
id := c.Param("album")
|
||||
val, ok := c.Get("token")
|
||||
if !ok {
|
||||
c.CustomRes("Foridden", "user token data not found")
|
||||
@ -99,7 +99,7 @@ func CreateAlbum(c *context.Context) {
|
||||
|
||||
// UpdateAlbum -
|
||||
func UpdateAlbum(c *context.Context) {
|
||||
id := c.Param("id")
|
||||
id := c.Param("album")
|
||||
postData := struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Public bool `json:"public" binding:"required"`
|
||||
@ -146,7 +146,7 @@ func UpdateAlbum(c *context.Context) {
|
||||
|
||||
// DeleteAlbum -
|
||||
func DeleteAlbum(c *context.Context) {
|
||||
id := c.Param("id")
|
||||
id := c.Param("album")
|
||||
if len(id) == 0 {
|
||||
c.NotFound(nil)
|
||||
return
|
||||
|
@ -12,12 +12,14 @@ func GetAllAlbumPhotos(c *context.Context) {
|
||||
|
||||
// GetPhoto -
|
||||
func GetPhoto(c *context.Context) {
|
||||
album, ok := c.Get("album")
|
||||
data, ok := c.Get("album")
|
||||
album := data.(models.Album)
|
||||
if !ok {
|
||||
c.NotFound("album not found")
|
||||
return
|
||||
}
|
||||
_, err := models.GetPhoto(album.(map[string]interface{})["id"].(string))
|
||||
|
||||
_, err := models.GetPhoto(album.ID)
|
||||
if err != nil {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
|
@ -51,9 +51,9 @@ func SetDefaultRoutes(r *gin.Engine) {
|
||||
albumAPI := api.Group("/album", context.PatchContext(middleware.VerifyToken))
|
||||
{
|
||||
albumAPI.POST("/", context.PatchContext(album.CreateAlbum))
|
||||
albumAPI.GET("/:id", context.PatchContext(album.GetAlbum))
|
||||
albumAPI.PUT("/:id", context.PatchContext(album.UpdateAlbum))
|
||||
albumAPI.DELETE("/:id", context.PatchContext(album.DeleteAlbum))
|
||||
albumAPI.GET("/:album", context.PatchContext(album.GetAlbum))
|
||||
albumAPI.PUT("/:album", context.PatchContext(album.UpdateAlbum))
|
||||
albumAPI.DELETE("/:album", context.PatchContext(album.DeleteAlbum))
|
||||
}
|
||||
photoAPI := albumAPI.Group("/:album/photo", context.PatchContext(middleware.VerifyToken), context.PatchContext(middleware.GetAlbumToNext))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user