Ещё немного рефакторинга
This commit is contained in:
parent
26bb547c43
commit
005fb8e7dc
1 changed files with 46 additions and 40 deletions
86
main.go
86
main.go
|
@ -16,6 +16,24 @@ import (
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ImageProvider interface {
|
||||||
|
GetImage() string
|
||||||
|
}
|
||||||
|
|
||||||
|
type LocalProvider struct{}
|
||||||
|
|
||||||
|
type S3Provider struct {
|
||||||
|
confHundler ConfHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p LocalProvider) GetImage() string {
|
||||||
|
return GetRandImg()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p S3Provider) GetImage() string {
|
||||||
|
return p.confHundler.GetRandImgS3()
|
||||||
|
}
|
||||||
|
|
||||||
func GetPicsArray() []string {
|
func GetPicsArray() []string {
|
||||||
files, err := os.ReadDir("images")
|
files, err := os.ReadDir("images")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -37,23 +55,6 @@ func (conf *ConfHandler) GetRandImgS3() string {
|
||||||
return picsArray[rand.Intn(len(picsArray))]
|
return picsArray[rand.Intn(len(picsArray))]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (conf *ConfHandler) ReturnObjectName(w http.ResponseWriter, req *http.Request) {
|
|
||||||
var picFilename io.Reader = strings.NewReader(conf.GetRandImgS3())
|
|
||||||
log.Println("Картинка отдана")
|
|
||||||
io.Copy(w, picFilename)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conf *ConfHandler) ReturnHTMLS3(w http.ResponseWriter, req *http.Request) {
|
|
||||||
htmlOpen, err := template.ParseFiles("dist/index.html")
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
image := conf.GetRandImgS3()
|
|
||||||
log.Println(image)
|
|
||||||
htmlOpen.Execute(w, image)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetRandImg() string {
|
func GetRandImg() string {
|
||||||
picsArray := GetPicsArray()
|
picsArray := GetPicsArray()
|
||||||
if len(picsArray) == 0 {
|
if len(picsArray) == 0 {
|
||||||
|
@ -62,23 +63,25 @@ func GetRandImg() string {
|
||||||
return picsArray[rand.Intn(len(picsArray))]
|
return picsArray[rand.Intn(len(picsArray))]
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReturnPicFilename(w http.ResponseWriter, req *http.Request) {
|
func ReturnPicFilename(provider ImageProvider) http.HandlerFunc {
|
||||||
var picFilename io.Reader = strings.NewReader(GetRandImg())
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Println("Картинка отдана")
|
image := provider.GetImage()
|
||||||
io.Copy(w, picFilename)
|
io.Copy(w, strings.NewReader(image))
|
||||||
|
log.Println("Картинка отдана")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReturnHTML(w http.ResponseWriter, req *http.Request) {
|
func ReturnHTML(provider ImageProvider) http.HandlerFunc {
|
||||||
htmlOpen, err := template.ParseFiles("dist/index.html")
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
if err != nil {
|
htmlOpen, err := template.ParseFiles("dist/index.html")
|
||||||
log.Println(err.Error())
|
if err != nil {
|
||||||
return
|
log.Println(err.Error())
|
||||||
}
|
return
|
||||||
image := GetRandImg()
|
}
|
||||||
log.Println(image)
|
image := provider.GetImage()
|
||||||
if err := htmlOpen.Execute(w, image); err != nil {
|
if err := htmlOpen.Execute(w, image); err != nil {
|
||||||
log.Printf("Ошибка рендеринга HTML: %v", err)
|
log.Printf("Ошибка рендеринга: %v", err)
|
||||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,11 +138,11 @@ func main() {
|
||||||
http.Handle("/images/", http.StripPrefix("/images/", imagesDir))
|
http.Handle("/images/", http.StripPrefix("/images/", imagesDir))
|
||||||
http.Handle("/assets/", http.StripPrefix("/assets/", staticDir))
|
http.Handle("/assets/", http.StripPrefix("/assets/", staticDir))
|
||||||
|
|
||||||
|
var provider ImageProvider
|
||||||
|
|
||||||
if !conf.UseS3 {
|
if !conf.UseS3 {
|
||||||
http.HandleFunc("/rand", ReturnPicFilename)
|
provider = LocalProvider{}
|
||||||
http.HandleFunc("/", ReturnHTML)
|
|
||||||
} else {
|
} else {
|
||||||
var confHandler ConfHandler
|
|
||||||
minioClient, err := minio.New(conf.Address, &minio.Options{
|
minioClient, err := minio.New(conf.Address, &minio.Options{
|
||||||
Creds: credentials.NewStaticV4(conf.AccessKey, conf.SecretKey, ""),
|
Creds: credentials.NewStaticV4(conf.AccessKey, conf.SecretKey, ""),
|
||||||
Secure: true,
|
Secure: true,
|
||||||
|
@ -148,11 +151,14 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
confHandler.minioClient = minioClient
|
provider = S3Provider{
|
||||||
confHandler.ConfigHandler = conf
|
confHundler: ConfHandler{
|
||||||
http.HandleFunc("/rand", confHandler.ReturnObjectName)
|
ConfigHandler: conf,
|
||||||
http.HandleFunc("/", confHandler.ReturnHTMLS3)
|
minioClient: minioClient,
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
http.HandleFunc("/rand", ReturnPicFilename(provider))
|
||||||
|
http.HandleFunc("/", ReturnHTML(provider))
|
||||||
http.ListenAndServe(":3666", nil)
|
http.ListenAndServe(":3666", nil)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue