forked from ebhomengo/niki
				
			new_sample_structure
This commit is contained in:
		
							parent
							
								
									8614245d15
								
							
						
					
					
						commit
						f28c3a6c42
					
				| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
# Default ignored files
 | 
					# Default ignored files
 | 
				
			||||||
/shelf/
 | 
					/shelf/
 | 
				
			||||||
/workspace.xml
 | 
					/workspace.xml
 | 
				
			||||||
# Datasource local storage ignored files
 | 
					# Editor-based HTTP Client requests
 | 
				
			||||||
/dataSources/
 | 
					/httpRequests/
 | 
				
			||||||
/dataSources.local.xml
 | 
					# Datasource local storage ignored files
 | 
				
			||||||
# Editor-based HTTP Client requests
 | 
					/dataSources/
 | 
				
			||||||
/httpRequests/
 | 
					/dataSources.local.xml
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +0,0 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<project version="4">
 | 
					 | 
				
			||||||
  <component name="DiscordProjectSettings">
 | 
					 | 
				
			||||||
    <option name="show" value="ASK" />
 | 
					 | 
				
			||||||
    <option name="description" value="" />
 | 
					 | 
				
			||||||
  </component>
 | 
					 | 
				
			||||||
</project>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<project version="4">
 | 
					<project version="4">
 | 
				
			||||||
  <component name="ProjectModuleManager">
 | 
					  <component name="ProjectModuleManager">
 | 
				
			||||||
    <modules>
 | 
					    <modules>
 | 
				
			||||||
      <module fileurl="file://$PROJECT_DIR$/.idea/niki.iml" filepath="$PROJECT_DIR$/.idea/niki.iml" />
 | 
					      <module fileurl="file://$PROJECT_DIR$/.idea/amir-niki.iml" filepath="$PROJECT_DIR$/.idea/amir-niki.iml" />
 | 
				
			||||||
    </modules>
 | 
					    </modules>
 | 
				
			||||||
  </component>
 | 
					  </component>
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
| 
						 | 
					@ -1,4 +0,0 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<module version="4">
 | 
					 | 
				
			||||||
  <component name="Go" enabled="true" />
 | 
					 | 
				
			||||||
</module>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,6 +0,0 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<project version="4">
 | 
					 | 
				
			||||||
  <component name="VcsDirectoryMappings">
 | 
					 | 
				
			||||||
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
 | 
					 | 
				
			||||||
  </component>
 | 
					 | 
				
			||||||
</project>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,23 +0,0 @@
 | 
				
			||||||
package storage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import entitypiggybankrequest "git.gocasts.ir/ebhomengo/niki/entity/piggy_bank_request"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (d *DBMS) AddPiggyRequestBank([]entitypiggybankrequest.PiggyBankRequest) error {
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) EditPiggyRequestBank(PiggyRequestID uint, PiggyRequestBankInput entitypiggybankrequest.PiggyBankRequest) error {
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) DeletePiggyRequestBank(PiggyRequestID uint) error {
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) GetAllPiggyRequestBank() ([]entitypiggybankrequest.PiggyBankRequest, error) {
 | 
					 | 
				
			||||||
	return []entitypiggybankrequest.PiggyBankRequest{}, nil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) GetPiggyRequestBankByID(PiggyRequestBank uint) (entitypiggybankrequest.PiggyBankRequest, error) {
 | 
					 | 
				
			||||||
	return entitypiggybankrequest.PiggyBankRequest{}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,30 +0,0 @@
 | 
				
			||||||
package storage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	storage "git.gocasts.ir/ebhomengo/niki/adapter/storage/models"
 | 
					 | 
				
			||||||
	entitypiggybank "git.gocasts.ir/ebhomengo/niki/entity/piggy_bank"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (d *DBMS) AddPiggyBank([]entitypiggybank.PiggyBank) error {
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) EditPiggyBank(piggyID uint, piggyBankInput entitypiggybank.PiggyBank) error {
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) DeletePiggyBank(piggyID uint) error {
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) GetAllPiggyBank() ([]entitypiggybank.PiggyBank, error) {
 | 
					 | 
				
			||||||
	var storeResponse []storage.PiggyBank
 | 
					 | 
				
			||||||
	if err := d.db.Find(&storeResponse).Error; err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	actionsEntities := make([]entitypiggybank.PiggyBank, len(storeResponse))
 | 
					 | 
				
			||||||
	for i := range storeResponse {
 | 
					 | 
				
			||||||
		actionsEntities[i] = storage.MapActionsStoreToEntity(storeResponse[i])
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return actionsEntities, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (d *DBMS) GetPiggyBankByID(piggyBankID uint) (entitypiggybank.PiggyBank, error) {
 | 
					 | 
				
			||||||
	return entitypiggybank.PiggyBank{}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,22 +0,0 @@
 | 
				
			||||||
package storage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var DB DBMS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Init() {
 | 
					 | 
				
			||||||
	var eErr error
 | 
					 | 
				
			||||||
	//I. Define a data source name (DSN)
 | 
					 | 
				
			||||||
	dsn := "niki_user:NIKI_user@123@tcp(127.0.0.1:3306)/niki?charset=utf8mb4&parseTime=True&loc=Local"
 | 
					 | 
				
			||||||
	//II. Try to connect to dsn address
 | 
					 | 
				
			||||||
	DB, eErr = GormConnect(dsn)
 | 
					 | 
				
			||||||
	//III. If gorm connect successfully then try to migrate database
 | 
					 | 
				
			||||||
	if eErr == nil {
 | 
					 | 
				
			||||||
		err := GormAutoMigrate(*DB.db)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			fmt.Errorf("some error .... %#v", err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
package storage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	entitypiggybank "git.gocasts.ir/ebhomengo/niki/entity/piggy_bank"
 | 
					 | 
				
			||||||
	"gorm.io/gorm"
 | 
					 | 
				
			||||||
	"time"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type PiggyBank struct {
 | 
					 | 
				
			||||||
	gorm.Model
 | 
					 | 
				
			||||||
	TotalAmount  uint
 | 
					 | 
				
			||||||
	SerialNumber string
 | 
					 | 
				
			||||||
	//to don't insert value in "updated_at" at "insert mode" :
 | 
					 | 
				
			||||||
	//see more: https://gorm.io/docs/update.html
 | 
					 | 
				
			||||||
	UpdatedAt *time.Time `json:"updated_at" gorm:"<-:update"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func MapActionsStoreToEntity(piggyBank PiggyBank) entitypiggybank.PiggyBank {
 | 
					 | 
				
			||||||
	returnModel := entitypiggybank.PiggyBank{
 | 
					 | 
				
			||||||
		ID:           piggyBank.ID,
 | 
					 | 
				
			||||||
		SerialNumber: piggyBank.SerialNumber,
 | 
					 | 
				
			||||||
		TotalAmount:  piggyBank.TotalAmount,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return returnModel
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func MapEntityToActionsStore(input entitypiggybank.PiggyBank) PiggyBank {
 | 
					 | 
				
			||||||
	return PiggyBank{
 | 
					 | 
				
			||||||
		SerialNumber: input.SerialNumber,
 | 
					 | 
				
			||||||
		TotalAmount:  input.TotalAmount,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
package storage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	storage "git.gocasts.ir/ebhomengo/niki/adapter/storage/models"
 | 
					 | 
				
			||||||
	"gorm.io/driver/mysql"
 | 
					 | 
				
			||||||
	"gorm.io/gorm"
 | 
					 | 
				
			||||||
	"gorm.io/gorm/logger"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type DBMS struct {
 | 
					 | 
				
			||||||
	db *gorm.DB
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func GormConnect(dsn string) (DBMS, error) {
 | 
					 | 
				
			||||||
	gorm, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
 | 
					 | 
				
			||||||
		Logger: logger.Default.LogMode(logger.Info),
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return DBMS{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return DBMS{db: gorm}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func GormAutoMigrate(db gorm.DB) error {
 | 
					 | 
				
			||||||
	// Migrate the schema
 | 
					 | 
				
			||||||
	err := db.AutoMigrate(
 | 
					 | 
				
			||||||
		storage.PiggyBank{},
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		panic(any("Storage auto migrate has error"))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return err
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					package config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type HTTPServer struct {
 | 
				
			||||||
 | 
						Port int `koanf:"port"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Config struct {
 | 
				
			||||||
 | 
						HTTPServer HTTPServer   `koanf:"http_server"`
 | 
				
			||||||
 | 
						Mysql      mysql.Config `koanf:"mysql"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,12 +0,0 @@
 | 
				
			||||||
package V1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	deliverypiggybank "git.gocasts.ir/ebhomengo/niki/delivery/http/V1/piggy_bank"
 | 
					 | 
				
			||||||
	"github.com/labstack/echo/v4"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Init(echo *echo.Echo) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	deliverypiggybank.Routs(echo)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,12 +0,0 @@
 | 
				
			||||||
package deliverypiggybank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"github.com/labstack/echo/v4"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func EditPiggyBank() echo.HandlerFunc {
 | 
					 | 
				
			||||||
	return func(c echo.Context) error {
 | 
					 | 
				
			||||||
		return c.JSON(http.StatusOK, nil)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,8 +0,0 @@
 | 
				
			||||||
package deliverypiggybank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "github.com/labstack/echo/v4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Routs(e *echo.Echo) {
 | 
					 | 
				
			||||||
	//initialise piggy_bank details routes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,13 +0,0 @@
 | 
				
			||||||
package deliverypiggybank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"github.com/labstack/echo/v4"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewPiggyBank() echo.HandlerFunc {
 | 
					 | 
				
			||||||
	return func(c echo.Context) error {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return c.JSON(http.StatusCreated, "")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,20 +0,0 @@
 | 
				
			||||||
package http
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/delivery/http/V1"
 | 
					 | 
				
			||||||
	"github.com/labstack/echo/v4"
 | 
					 | 
				
			||||||
	"github.com/labstack/echo/v4/middleware"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Init() {
 | 
					 | 
				
			||||||
	//initialise new Echo (web framework)
 | 
					 | 
				
			||||||
	e := echo.New()
 | 
					 | 
				
			||||||
	e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
 | 
					 | 
				
			||||||
		AllowOrigins: []string{"*" /*, "https://labstack.net"*/},
 | 
					 | 
				
			||||||
		AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept},
 | 
					 | 
				
			||||||
	}))
 | 
					 | 
				
			||||||
	//handle incoming requests:
 | 
					 | 
				
			||||||
	V1.Init(e)
 | 
					 | 
				
			||||||
	//serve with port
 | 
					 | 
				
			||||||
	e.Logger.Fatal(e.Start(":1313"))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					package httpserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/config"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Server struct {
 | 
				
			||||||
 | 
						config config.Config
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(config config.Config) Server {
 | 
				
			||||||
 | 
						return Server{
 | 
				
			||||||
 | 
							config: config,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Server) Serve() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,17 +0,0 @@
 | 
				
			||||||
package dto
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	entitypiggybank "git.gocasts.ir/ebhomengo/niki/entity/piggy_bank"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type (
 | 
					 | 
				
			||||||
	//get
 | 
					 | 
				
			||||||
	GetPiggyBankRequest struct {
 | 
					 | 
				
			||||||
		ID           uint   `json:"id"`
 | 
					 | 
				
			||||||
		TotalAmount  uint   `json:"totalAmount"`
 | 
					 | 
				
			||||||
		SerialNumber string `json:"serialNumber"`
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	GetPiggyBankResponse struct {
 | 
					 | 
				
			||||||
		Games []entitypiggybank.PiggyBank
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					package entity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBank struct {
 | 
				
			||||||
 | 
						ID              uint
 | 
				
			||||||
 | 
						TotalAmount     uint
 | 
				
			||||||
 | 
						SerialNumber    string
 | 
				
			||||||
 | 
						Status          uint
 | 
				
			||||||
 | 
						StatusChangedAt *time.Time
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,9 +0,0 @@
 | 
				
			||||||
package entitypiggybank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type PiggyBankServices interface {
 | 
					 | 
				
			||||||
	AddPiggyBank([]PiggyBank) error
 | 
					 | 
				
			||||||
	EditPiggyBank(piggyID uint, piggyBankInput PiggyBank) error
 | 
					 | 
				
			||||||
	DeletePiggyBank(piggyID uint) error
 | 
					 | 
				
			||||||
	GetAllPiggyBank() ([]PiggyBank, error)
 | 
					 | 
				
			||||||
	GetPiggyBankByID(piggyBankID uint) (PiggyBank, error)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,9 +0,0 @@
 | 
				
			||||||
package entitypiggybank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type (
 | 
					 | 
				
			||||||
	PiggyBank struct {
 | 
					 | 
				
			||||||
		ID           uint
 | 
					 | 
				
			||||||
		TotalAmount  uint
 | 
					 | 
				
			||||||
		SerialNumber string
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,9 +0,0 @@
 | 
				
			||||||
package entitypiggybankrequest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type PiggyRequestBankRequestServices interface {
 | 
					 | 
				
			||||||
	AddPiggyRequestBank([]PiggyBankRequest) error
 | 
					 | 
				
			||||||
	EditPiggyRequestBank(PiggyRequestID uint, PiggyRequestBankInput PiggyBankRequest) error
 | 
					 | 
				
			||||||
	DeletePiggyRequestBank(PiggyRequestID uint) error
 | 
					 | 
				
			||||||
	GetAllPiggyRequestBank() ([]PiggyBankRequest, error)
 | 
					 | 
				
			||||||
	GetPiggyRequestBankByID(PiggyRequestBank uint) (PiggyBankRequest, error)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,12 +0,0 @@
 | 
				
			||||||
package entitypiggybankrequest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type (
 | 
					 | 
				
			||||||
	PiggyBankRequest struct {
 | 
					 | 
				
			||||||
		ID             uint
 | 
					 | 
				
			||||||
		TypeId         uint
 | 
					 | 
				
			||||||
		CountRequested uint
 | 
					 | 
				
			||||||
		CountAccepted  uint
 | 
					 | 
				
			||||||
		BenefactorID   uint
 | 
					 | 
				
			||||||
		Description    string
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
							
								
								
									
										25
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										25
									
								
								go.mod
								
								
								
								
							| 
						 | 
					@ -1,26 +1,3 @@
 | 
				
			||||||
module git.gocasts.ir/ebhomengo/niki
 | 
					module git.gocasts.ir/ebhomengo/niki
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go 1.21.0
 | 
					go 1.21.3
 | 
				
			||||||
 | 
					 | 
				
			||||||
require (
 | 
					 | 
				
			||||||
	github.com/labstack/echo/v4 v4.11.3
 | 
					 | 
				
			||||||
	gorm.io/driver/mysql v1.5.2
 | 
					 | 
				
			||||||
	gorm.io/gorm v1.25.5
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require (
 | 
					 | 
				
			||||||
	github.com/go-sql-driver/mysql v1.7.0 // indirect
 | 
					 | 
				
			||||||
	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 | 
					 | 
				
			||||||
	github.com/jinzhu/inflection v1.0.0 // indirect
 | 
					 | 
				
			||||||
	github.com/jinzhu/now v1.1.5 // indirect
 | 
					 | 
				
			||||||
	github.com/labstack/gommon v0.4.0 // indirect
 | 
					 | 
				
			||||||
	github.com/mattn/go-colorable v0.1.13 // indirect
 | 
					 | 
				
			||||||
	github.com/mattn/go-isatty v0.0.19 // indirect
 | 
					 | 
				
			||||||
	github.com/valyala/bytebufferpool v1.0.0 // indirect
 | 
					 | 
				
			||||||
	github.com/valyala/fasttemplate v1.2.2 // indirect
 | 
					 | 
				
			||||||
	golang.org/x/crypto v0.14.0 // indirect
 | 
					 | 
				
			||||||
	golang.org/x/net v0.17.0 // indirect
 | 
					 | 
				
			||||||
	golang.org/x/sys v0.13.0 // indirect
 | 
					 | 
				
			||||||
	golang.org/x/text v0.13.0 // indirect
 | 
					 | 
				
			||||||
	golang.org/x/time v0.3.0 // indirect
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								main.go
								
								
								
								
							
							
						
						
									
										12
									
								
								main.go
								
								
								
								
							| 
						 | 
					@ -1,13 +1,5 @@
 | 
				
			||||||
package niki
 | 
					package main
 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/adapter/storage"
 | 
					 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/delivery/http"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	//initialize D.B.M.S. (Database management system)
 | 
					
 | 
				
			||||||
	storage.Init()
 | 
					 | 
				
			||||||
	//initialize new Echo (web framework)
 | 
					 | 
				
			||||||
	http.Init()
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankDeleteRequest struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankDeleteResponse struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankGetAllRequest struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankGetAllResponse struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankGetByIdRequest struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankGetByIdResponse struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankStoreRequest struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankStoreResponse struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankUpdateRequest struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PiggyBankUpdateResponse struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					package mysql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"database/sql"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Config struct {
 | 
				
			||||||
 | 
						Username string `koanf:"username"`
 | 
				
			||||||
 | 
						Password string `koanf:"password"`
 | 
				
			||||||
 | 
						Port     int    `koanf:"port"`
 | 
				
			||||||
 | 
						Host     string `koanf:"host"`
 | 
				
			||||||
 | 
						DBName   string `koanf:"db_name"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type MySQLDB struct {
 | 
				
			||||||
 | 
						config Config
 | 
				
			||||||
 | 
						db     *sql.DB
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *MySQLDB) Conn() *sql.DB {
 | 
				
			||||||
 | 
						return m.db
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(config Config) *MySQLDB {
 | 
				
			||||||
 | 
						// parseTime=true changes the output type of DATE and DATETIME values to time.Time
 | 
				
			||||||
 | 
						// instead of []byte / string
 | 
				
			||||||
 | 
						// The date or datetime like 0000-00-00 00:00:00 is converted into zero value of time.Time
 | 
				
			||||||
 | 
						db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@(%s:%d)/%s?parseTime=true",
 | 
				
			||||||
 | 
							config.Username, config.Password, config.Host, config.Port, config.DBName))
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(fmt.Errorf("can't open mysql db: %v", err))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// See "Important settings" section.
 | 
				
			||||||
 | 
						db.SetConnMaxLifetime(time.Minute * 3)
 | 
				
			||||||
 | 
						db.SetMaxOpenConns(10)
 | 
				
			||||||
 | 
						db.SetMaxIdleConns(10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &MySQLDB{config: config, db: db}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					package mysqlpiggybank
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/repository/mysql"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DB struct {
 | 
				
			||||||
 | 
						conn *mysql.MySQLDB
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(conn *mysql.MySQLDB) *DB {
 | 
				
			||||||
 | 
						return &DB{
 | 
				
			||||||
 | 
							conn: conn,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					package mysqlpiggybank
 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
package piggy_bank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	dto "git.gocasts.ir/ebhomengo/niki/dto/piggy_bank"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (uc Usecase) EditPiggyBank(req dto.GetPiggyBankRequest) error {
 | 
					 | 
				
			||||||
	//validation DTO request
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,14 +0,0 @@
 | 
				
			||||||
package piggy_bank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"git.gocasts.ir/ebhomengo/niki/adapter/storage"
 | 
					 | 
				
			||||||
	entitypiggybank "git.gocasts.ir/ebhomengo/niki/entity/piggy_bank"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Usecase struct {
 | 
					 | 
				
			||||||
	storage entitypiggybank.PiggyBankServices
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func InitUsecase() Usecase {
 | 
					 | 
				
			||||||
	return Usecase{storage: &storage.DB}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
package piggy_bank
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	dto "git.gocasts.ir/ebhomengo/niki/dto/piggy_bank"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (uc Usecase) NewPiggyBank(req dto.GetPiggyBankRequest) error {
 | 
					 | 
				
			||||||
	//validation DTO request
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) Delete(req param.PiggyBankDeleteRequest) (param.PiggyBankDeleteResponse, error) {
 | 
				
			||||||
 | 
						return param.PiggyBankDeleteResponse{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) GetAll(req param.PiggyBankGetAllRequest) (param.PiggyBankGetAllResponse, error) {
 | 
				
			||||||
 | 
						return param.PiggyBankGetAllResponse{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) GetById(req param.PiggyBankGetByIdRequest) (param.PiggyBankGetByIdResponse, error) {
 | 
				
			||||||
 | 
						return param.PiggyBankGetByIdResponse{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					package piggybankservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/entity"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Repository interface {
 | 
				
			||||||
 | 
						AddPiggyBank(piggy entity.PiggyBank) (entity.PiggyBank, error)
 | 
				
			||||||
 | 
						EditPiggyBank(piggyID uint, piggyBankInput entity.PiggyBank) (entity.PiggyBank, error)
 | 
				
			||||||
 | 
						DeletePiggyBank(piggyID uint) error
 | 
				
			||||||
 | 
						GetAllPiggyBank() ([]entity.PiggyBank, error)
 | 
				
			||||||
 | 
						GetPiggyBankByID(piggyBank uint) (entity.PiggyBank, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Service struct {
 | 
				
			||||||
 | 
						repo Repository
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(repository Repository) Service {
 | 
				
			||||||
 | 
						return Service{
 | 
				
			||||||
 | 
							repo: repository,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) Store(req param.PiggyBankStoreRequest) (param.PiggyBankStoreResponse, error) {
 | 
				
			||||||
 | 
						return param.PiggyBankStoreResponse{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankservice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s Service) Update(req param.PiggyBankUpdateRequest) (param.PiggyBankUpdateResponse, error) {
 | 
				
			||||||
 | 
						return param.PiggyBankUpdateResponse{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) ValidateDeleteRequest(req param.PiggyBankDeleteRequest) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) ValidateGetByIdRequest(req param.PiggyBankGetByIdRequest) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) ValidateStoreRequest(req param.PiggyBankStoreRequest) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					package piggybankvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "git.gocasts.ir/ebhomengo/niki/param"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (v Validator) ValidateUpdateRequest(req param.PiggyBankUpdateRequest) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					package piggybankvalidator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Repository interface {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Validator struct {
 | 
				
			||||||
 | 
						repo Repository
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func New(repo Repository) Validator {
 | 
				
			||||||
 | 
						return Validator{repo: repo}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue