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"
|
"log"
|
||||||
|
|
||||||
"git.trj.tw/golang/go-gallery/models"
|
"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/memstore"
|
||||||
|
"git.trj.tw/golang/go-gallery/modules/options"
|
||||||
"git.trj.tw/golang/go-gallery/routers/routes"
|
"git.trj.tw/golang/go-gallery/routers/routes"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var server *gin.Engine
|
var server *gin.Engine
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
options.RegFlag()
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
err := memstore.InitClient()
|
err := memstore.InitClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
err = config.LoadConfig()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
server = routes.NewServ()
|
server = routes.NewServ()
|
||||||
x, err := models.NewDB()
|
x, err := models.NewDB()
|
||||||
defer x.Close()
|
defer x.Close()
|
||||||
|
@ -2,7 +2,9 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.trj.tw/golang/go-gallery/modules/config"
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -11,6 +13,8 @@ var x *sql.DB
|
|||||||
// NewDB - db object
|
// NewDB - db object
|
||||||
func NewDB() (*sql.DB, error) {
|
func NewDB() (*sql.DB, error) {
|
||||||
var err 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
|
return x, err
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,66 @@
|
|||||||
package config
|
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 {
|
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 (
|
import (
|
||||||
"git.trj.tw/golang/go-gallery/models"
|
"git.trj.tw/golang/go-gallery/models"
|
||||||
"git.trj.tw/golang/go-gallery/modules/context"
|
"git.trj.tw/golang/go-gallery/modules/context"
|
||||||
"git.trj.tw/golang/go-gallery/modules/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetAlbumToNext -
|
// GetAlbumToNext -
|
||||||
@ -30,8 +29,8 @@ func GetAlbumToNext(c *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
albumMap := utils.ToMap(album)
|
// albumMap := utils.ToMap(album)
|
||||||
c.Set("album", albumMap)
|
c.Set("album", album)
|
||||||
|
|
||||||
c.Next()
|
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
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ToMap struct to map[string]interface{}
|
// ToMap struct to map[string]interface{}
|
||||||
@ -30,3 +34,51 @@ func ToMap(ss interface{}) map[string]interface{} {
|
|||||||
|
|
||||||
return smap
|
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 -
|
// GetAlbum -
|
||||||
func GetAlbum(c *context.Context) {
|
func GetAlbum(c *context.Context) {
|
||||||
id := c.Param("id")
|
id := c.Param("album")
|
||||||
val, ok := c.Get("token")
|
val, ok := c.Get("token")
|
||||||
if !ok {
|
if !ok {
|
||||||
c.CustomRes("Foridden", "user token data not found")
|
c.CustomRes("Foridden", "user token data not found")
|
||||||
@ -99,7 +99,7 @@ func CreateAlbum(c *context.Context) {
|
|||||||
|
|
||||||
// UpdateAlbum -
|
// UpdateAlbum -
|
||||||
func UpdateAlbum(c *context.Context) {
|
func UpdateAlbum(c *context.Context) {
|
||||||
id := c.Param("id")
|
id := c.Param("album")
|
||||||
postData := struct {
|
postData := struct {
|
||||||
Name string `json:"name" binding:"required"`
|
Name string `json:"name" binding:"required"`
|
||||||
Public bool `json:"public" binding:"required"`
|
Public bool `json:"public" binding:"required"`
|
||||||
@ -146,7 +146,7 @@ func UpdateAlbum(c *context.Context) {
|
|||||||
|
|
||||||
// DeleteAlbum -
|
// DeleteAlbum -
|
||||||
func DeleteAlbum(c *context.Context) {
|
func DeleteAlbum(c *context.Context) {
|
||||||
id := c.Param("id")
|
id := c.Param("album")
|
||||||
if len(id) == 0 {
|
if len(id) == 0 {
|
||||||
c.NotFound(nil)
|
c.NotFound(nil)
|
||||||
return
|
return
|
||||||
|
@ -12,12 +12,14 @@ func GetAllAlbumPhotos(c *context.Context) {
|
|||||||
|
|
||||||
// GetPhoto -
|
// GetPhoto -
|
||||||
func GetPhoto(c *context.Context) {
|
func GetPhoto(c *context.Context) {
|
||||||
album, ok := c.Get("album")
|
data, ok := c.Get("album")
|
||||||
|
album := data.(models.Album)
|
||||||
if !ok {
|
if !ok {
|
||||||
c.NotFound("album not found")
|
c.NotFound("album not found")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, err := models.GetPhoto(album.(map[string]interface{})["id"].(string))
|
|
||||||
|
_, err := models.GetPhoto(album.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ServerError(nil)
|
c.ServerError(nil)
|
||||||
return
|
return
|
||||||
|
@ -51,9 +51,9 @@ func SetDefaultRoutes(r *gin.Engine) {
|
|||||||
albumAPI := api.Group("/album", context.PatchContext(middleware.VerifyToken))
|
albumAPI := api.Group("/album", context.PatchContext(middleware.VerifyToken))
|
||||||
{
|
{
|
||||||
albumAPI.POST("/", context.PatchContext(album.CreateAlbum))
|
albumAPI.POST("/", context.PatchContext(album.CreateAlbum))
|
||||||
albumAPI.GET("/:id", context.PatchContext(album.GetAlbum))
|
albumAPI.GET("/:album", context.PatchContext(album.GetAlbum))
|
||||||
albumAPI.PUT("/:id", context.PatchContext(album.UpdateAlbum))
|
albumAPI.PUT("/:album", context.PatchContext(album.UpdateAlbum))
|
||||||
albumAPI.DELETE("/:id", context.PatchContext(album.DeleteAlbum))
|
albumAPI.DELETE("/:album", context.PatchContext(album.DeleteAlbum))
|
||||||
}
|
}
|
||||||
photoAPI := albumAPI.Group("/:album/photo", context.PatchContext(middleware.VerifyToken), context.PatchContext(middleware.GetAlbumToNext))
|
photoAPI := albumAPI.Group("/:album/photo", context.PatchContext(middleware.VerifyToken), context.PatchContext(middleware.GetAlbumToNext))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user