atom

package module
v1.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2023 License: MIT Imports: 10 Imported by: 22

README

ATOM

快速开始 工具使用

框架介绍

技术栈
命令行工具 atomctl
安装
go install github.com/rogeecn/atomctl@latest
工具使用
  • gen 生成类功能
  • new 创建类功能
gen:curd
atomctl gen crud [表名] [module]

例: 为 system 模块生成表 users 的 crud 操作 atomctl gen crud users system 命令会分别生成文件:

module/
    system/
        controllers/
            users.go
        service/
            users.go
        dao/
            users.go

生成的文件不会被自动注册,需要手动添加新生成的方法至各目录的 provider 中.

gen:routes
  1. 为整个项目生成 routes
    atomctl gen routes 
    
  2. 为指定controller 生成 routes
    atomctl gen routes [controller_file]
    

生成的路由需要手动注册至routes.go

new:controller
atomctl new controller [module] [name]
new:service
atomctl new service [module] [name]
new:dao
atomctl new dao [module] [name]
new:migration
atomctl new migration [migration_name]

创建文件路径 : project_path/database/migrations/migration_name.go

migration 需要创建后手动在当前项目中执行 go run . migrate 才可生效

new:seeder
atomctl new seeder [seeder_name]

创建文件路径 : project_path/database/seeders/seeder_name.go

注意:新添加的seeder需要手动在 project_path/database/seeders/seeder.go 中添加才可正常使用 使用方法: go run . seed

new:http
atomctl new http [pkg] [project_name]

生成一个新的http类型项目

new:module
atomctl new module [module_name]

为项目生成新的 module

new:suite
atomctl new suite [filename]

快速开始

下面将会创建一个用户管理应用示例程序

  1. 创建项目 atom-project

     atomctl new http atom/http atom-project
     cd atom-project
     go mod tidy
    
  2. 添加 user module

     atomctl new module users
    

    生成目录 modules/users

  3. 配置项目启动需要的 providers 打开入口文件 main.go。下面我们需要4个基本的provider

    • sqlite 数据库
    • swagger api文档
    • faker seeder数据生成
    • query dao需要
    • users 新建立的module
    • boot 应用数据初始化相关

    编辑后的 main 文件相关内容如下

    import (
        "atom/http/database/migrations"
        "atom/http/database/query"
        "atom/http/database/seeders"
        "atom/http/modules/boot"
        "atom/http/modules/users"
    
        "github.com/rogeecn/atom"
        "github.com/rogeecn/atom-addons/providers/database/sqlite"
        "github.com/rogeecn/atom-addons/providers/faker"
        "github.com/rogeecn/atom-addons/providers/swagger"
        "github.com/rogeecn/atom-addons/services/http"
        "github.com/spf13/cobra"
    )
    // ...
    providers := http.Default(
    	sqlite.DefaultProvider(),
    	swagger.DefaultProvider(),
    	faker.DefaultProvider(),
    	query.DefaultProvider(),
    ).With(
    	boot.Providers(),
    	users.Providers(),
    )
    // ...
    
  4. 创建 boot module provider 因为业务中需要用到业务内初始化内容,所以引入 boot provider 编辑文件 modules/boot/provider.go

    package boot
    
    import (
        "atom/http/docs"
    
        "github.com/rogeecn/atom"
        "github.com/rogeecn/atom-addons/providers/swagger"
        "github.com/rogeecn/atom/container"
        "github.com/rogeecn/atom/contracts"
        "github.com/rogeecn/atom/utils/opt"
    )
    
    func Providers() container.Providers {
        return container.Providers{
            {Provider: provideSwagger},
        }
    }
    
    func provideSwagger(opts ...opt.Option) error {
        return container.Container.Provide(func(swagger *swagger.Swagger) contracts.Initial {
            swagger.Load(docs.SwaggerSpec)
            return nil
        }, atom.GroupInitial)
    }
    
    
  5. 执行

     go mod tidy
    
  6. 添加 migration

    atomctl new migration create_user
    

    编辑新建的文件,内容如下:

    func (m *xxxx) table() interface{} {
        type User struct {
            gorm.Model // 注意,新建表必须引入此字段,更新表不需要
            Username string
            Age      int
            Sex      string
        }
    
        return &User{}
    }
    

    配置文件默认使用sqlite引擎,其它引擎同理

  7. 运行migration

    go run . migrate up
    

    直接执行,会运行失败,你会得到类似错误

    2023/06/15 17:50:54 load config file: : config file read error: Config File "http.toml" Not Found in "[/Users/rogee /Users/rogee/http /Users/rogee/.config /Users/rogee/.config/http /etc /etc/http /usr/local/etc /usr/local/etc/http]"
    

    把项目目录中的配置文件转移到配置文件查找目录中去

    ln -s  $PWD/config.toml ~/.config/http.toml  
    

    再次执行如下输出

    2023/06/15 17:53:12 config file: /Users/rogee/.config/http.toml
    2023/06/15 17:53:12 BINGO! migrate up done
    

    此时会在项目根目录下看到 sqlite.db 文件

  8. 生成model

     go run . model
    

    model 会在新表添加后再次执行生成,所以不要编辑任何 database/models下的文件内容

  9. 添加假数据

     atomctl new seeder User 
    

    注意User是单数,表示 model.User 区别于数据库表名

    编辑文件 database/seeders/users.go

    func (s *UsersSeeder) Generate(faker *gofakeit.Faker, idx int) models.User {
        return models.User{
            Username: faker.Name(),
            Age:      int32(faker.Number(18, 60)),
            Sex:      faker.RandomString([]string{"male", "female"}),
        }
    }
    

    编辑文件 database/seeders/seeder.go, 把新添加的seeder注册到执行列表中,添加的seeder会被有序执行

    var Seeders = []contracts.SeederProvider{
        NewUsersSeeder,
    }
    

    运行 go run . seed , 些时 users 表会被写入10条随机数据

  10. 添加 crud

    atomctl gen crud users users
    

    两个users第一个为crud的名称,第二个为模块名称,执行输出如下

    2023/06/15 18:06:42 generate:  modules/users/service/users.go
    2023/06/15 18:06:42 generate:  modules/users/dto/users.go
    2023/06/15 18:06:42 generate:  modules/users/dao/users.go
    2023/06/15 18:06:42 generate:  modules/users/controller/users.go
    2023/06/15 18:06:42 generate crud success
    2023/06/15 18:06:42 REMEMBER TO ADD NEW PROVIDERS
    
  11. 生成 api

    atomctl gen routes
    

    输出如下

    2023/06/15 18:07:43 route path:  /Users/rogee/tmp/atom-project
    2023/06/15 18:07:43 go mod package:  atom/http
    2023/06/15 18:07:43 generate routes for dir
    2023/06/15 18:07:43 generate route: /Users/rogee/tmp/atom-project/modules/users/routes/route_user_controller.go @ routeUserController(group, userController)
    
  12. 运行项目

    go generate ./...
    go run .
    
  13. 访问 localhost:9800/doc/index.html

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	GroupInitialName           = "initials"
	GroupRoutesName            = "routes"
	GroupGrpcServerServiceName = "grpc_server_services"
	GroupCommandName           = "command_services"
	GroupQueueName             = "queue_handler"

	GroupInitial    = dig.Group(GroupInitialName)
	GroupRoutes     = dig.Group(GroupRoutesName)
	GroupGrpcServer = dig.Group(GroupGrpcServerServiceName)
	GroupCommand    = dig.Group(GroupCommandName)
	GroupQueue      = dig.Group(GroupQueueName)
)
View Source
var (
	AppName    string
	AppVersion string
)

Functions

func LoadProviders

func LoadProviders(cfgFile, appName string, providers container.Providers) error

func Serve

func Serve(providers container.Providers, opts ...Option) error

Types

type Option

type Option func(*cobra.Command)

func CmdService added in v1.0.1

func CmdService() Option

func Config

func Config(file string) Option

func Long

func Long(long string) Option

func Name

func Name(name string) Option

func PostRun

func PostRun(run func(cmd *cobra.Command, args []string)) Option

func PostRunE

func PostRunE(run func(cmd *cobra.Command, args []string) error) Option

func PreRun

func PreRun(run func(cmd *cobra.Command, args []string)) Option

func PreRunE

func PreRunE(run func(cmd *cobra.Command, args []string) error) Option

func Run

func Run(run func(cmd *cobra.Command, args []string)) Option

func RunE

func RunE(run func(cmd *cobra.Command, args []string) error) Option

func Short

func Short(short string) Option

func Version added in v1.0.8

func Version(ver string) Option

type ServiceVars

type ServiceVars struct {
	ExecStart   string
	Description string
	WantedBy    string
}

Directories

Path Synopsis
cli
db
err
fs
opt
tap

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL