Ещё немного рефакторинга

This commit is contained in:
B4D_US3R 2025-03-04 23:22:30 +05:00
parent 26bb547c43
commit 005fb8e7dc

86
main.go
View file

@ -16,6 +16,24 @@ import (
"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 {
files, err := os.ReadDir("images")
if err != nil {
@ -37,23 +55,6 @@ func (conf *ConfHandler) GetRandImgS3() string {
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 {
picsArray := GetPicsArray()
if len(picsArray) == 0 {
@ -62,23 +63,25 @@ func GetRandImg() string {
return picsArray[rand.Intn(len(picsArray))]
}
func ReturnPicFilename(w http.ResponseWriter, req *http.Request) {
var picFilename io.Reader = strings.NewReader(GetRandImg())
log.Println("Картинка отдана")
io.Copy(w, picFilename)
func ReturnPicFilename(provider ImageProvider) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
image := provider.GetImage()
io.Copy(w, strings.NewReader(image))
log.Println("Картинка отдана")
}
}
func ReturnHTML(w http.ResponseWriter, req *http.Request) {
htmlOpen, err := template.ParseFiles("dist/index.html")
if err != nil {
log.Println(err.Error())
return
}
image := GetRandImg()
log.Println(image)
if err := htmlOpen.Execute(w, image); err != nil {
log.Printf("Ошибка рендеринга HTML: %v", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
func ReturnHTML(provider ImageProvider) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
htmlOpen, err := template.ParseFiles("dist/index.html")
if err != nil {
log.Println(err.Error())
return
}
image := provider.GetImage()
if err := htmlOpen.Execute(w, image); err != nil {
log.Printf("Ошибка рендеринга: %v", err)
}
}
}
@ -135,11 +138,11 @@ func main() {
http.Handle("/images/", http.StripPrefix("/images/", imagesDir))
http.Handle("/assets/", http.StripPrefix("/assets/", staticDir))
var provider ImageProvider
if !conf.UseS3 {
http.HandleFunc("/rand", ReturnPicFilename)
http.HandleFunc("/", ReturnHTML)
provider = LocalProvider{}
} else {
var confHandler ConfHandler
minioClient, err := minio.New(conf.Address, &minio.Options{
Creds: credentials.NewStaticV4(conf.AccessKey, conf.SecretKey, ""),
Secure: true,
@ -148,11 +151,14 @@ func main() {
if err != nil {
log.Fatalln(err)
}
confHandler.minioClient = minioClient
confHandler.ConfigHandler = conf
http.HandleFunc("/rand", confHandler.ReturnObjectName)
http.HandleFunc("/", confHandler.ReturnHTMLS3)
provider = S3Provider{
confHundler: ConfHandler{
ConfigHandler: conf,
minioClient: minioClient,
},
}
}
http.HandleFunc("/rand", ReturnPicFilename(provider))
http.HandleFunc("/", ReturnHTML(provider))
http.ListenAndServe(":3666", nil)
}