github.com/adharshmk96/stk@v1.2.3/pkg/project/tpl/modules.go (about) 1 package tpl 2 3 var MOCKS_PINGSERVICEGO_MOD_TPL = Template{ 4 FilePath: "mocks/PingService.go", 5 Render: true, 6 Content: `// Code generated by mockery v2.20.0. DO NOT EDIT. 7 8 package mocks 9 10 import mock "github.com/stretchr/testify/mock" 11 12 // {{ .ExportedName }}Service is an autogenerated mock type for the {{ .ExportedName }}Service type 13 type {{ .ExportedName }}Service struct { 14 mock.Mock 15 } 16 17 // {{ .ExportedName }}Service provides a mock function with given fields: 18 func (_m *{{ .ExportedName }}Service) {{ .ExportedName }}Service() (string, error) { 19 ret := _m.Called() 20 21 var r0 string 22 var r1 error 23 if rf, ok := ret.Get(0).(func() (string, error)); ok { 24 return rf() 25 } 26 if rf, ok := ret.Get(0).(func() string); ok { 27 r0 = rf() 28 } else { 29 r0 = ret.Get(0).(string) 30 } 31 32 if rf, ok := ret.Get(1).(func() error); ok { 33 r1 = rf() 34 } else { 35 r1 = ret.Error(1) 36 } 37 38 return r0, r1 39 } 40 41 type mockConstructorTestingTNew{{ .ExportedName }}Service interface { 42 mock.TestingT 43 Cleanup(func()) 44 } 45 46 // New{{ .ExportedName }}Service creates a new instance of {{ .ExportedName }}Service. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. 47 func New{{ .ExportedName }}Service(t mockConstructorTestingTNew{{ .ExportedName }}Service) *{{ .ExportedName }}Service { 48 mock := &{{ .ExportedName }}Service{} 49 mock.Mock.Test(t) 50 51 t.Cleanup(func() { mock.AssertExpectations(t) }) 52 53 return mock 54 } 55 `, 56 } 57 58 var MOCKS_PINGSTORAGEGO_MOD_TPL = Template{ 59 FilePath: "mocks/PingStorage.go", 60 Render: true, 61 Content: `// Code generated by mockery v2.20.0. DO NOT EDIT. 62 63 package mocks 64 65 import mock "github.com/stretchr/testify/mock" 66 67 // {{ .ExportedName }}Storage is an autogenerated mock type for the {{ .ExportedName }}Storage type 68 type {{ .ExportedName }}Storage struct { 69 mock.Mock 70 } 71 72 // {{ .ExportedName }} provides a mock function with given fields: 73 func (_m *{{ .ExportedName }}Storage) {{ .ExportedName }}() error { 74 ret := _m.Called() 75 76 var r0 error 77 if rf, ok := ret.Get(0).(func() error); ok { 78 r0 = rf() 79 } else { 80 r0 = ret.Error(0) 81 } 82 83 return r0 84 } 85 86 type mockConstructorTestingTNew{{ .ExportedName }}Storage interface { 87 mock.TestingT 88 Cleanup(func()) 89 } 90 91 // New{{ .ExportedName }}Storage creates a new instance of {{ .ExportedName }}Storage. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. 92 func New{{ .ExportedName }}Storage(t mockConstructorTestingTNew{{ .ExportedName }}Storage) *{{ .ExportedName }}Storage { 93 mock := &{{ .ExportedName }}Storage{} 94 mock.Mock.Test(t) 95 96 t.Cleanup(func() { mock.AssertExpectations(t) }) 97 98 return mock 99 } 100 `, 101 } 102 103 var MOCKS_PINGHANDLERSGO_MOD_TPL = Template{ 104 FilePath: "mocks/PingHandlers.go", 105 Render: true, 106 Content: `// Code generated by mockery v2.20.0. DO NOT EDIT. 107 108 package mocks 109 110 import ( 111 gsk "github.com/adharshmk96/stk/gsk" 112 mock "github.com/stretchr/testify/mock" 113 ) 114 115 // {{ .ExportedName }}Handlers is an autogenerated mock type for the {{ .ExportedName }}Handlers type 116 type {{ .ExportedName }}Handlers struct { 117 mock.Mock 118 } 119 120 // {{ .ExportedName }}Handler provides a mock function with given fields: gc 121 func (_m *{{ .ExportedName }}Handlers) {{ .ExportedName }}Handler(gc *gsk.Context) { 122 _m.Called(gc) 123 } 124 125 type mockConstructorTestingTNew{{ .ExportedName }}Handlers interface { 126 mock.TestingT 127 Cleanup(func()) 128 } 129 130 // New{{ .ExportedName }}Handlers creates a new instance of {{ .ExportedName }}Handlers. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. 131 func New{{ .ExportedName }}Handlers(t mockConstructorTestingTNew{{ .ExportedName }}Handlers) *{{ .ExportedName }}Handlers { 132 mock := &{{ .ExportedName }}Handlers{} 133 mock.Mock.Test(t) 134 135 t.Cleanup(func() { mock.AssertExpectations(t) }) 136 137 return mock 138 } 139 `, 140 } 141 142 var SERVER_ROUTING_PINGGO_MOD_TPL = Template{ 143 FilePath: "server/routing/ping.go", 144 Render: true, 145 Content: `package routing 146 147 import "{{ .PkgName }}/internals/{{ .ModName }}" 148 149 func init() { 150 RegisterApiRoutes({{ .ModName }}.SetupApiRoutes) 151 RegisterWebRoutes({{ .ModName }}.SetupWebRoutes) 152 } 153 `, 154 } 155 156 var INTERNALS_PING_ROUTESGO_MOD_TPL = Template{ 157 FilePath: "internals/ping/routes.go", 158 Render: true, 159 Content: `package {{ .ModName }} 160 161 import ( 162 "github.com/adharshmk96/stk/gsk" 163 "{{ .PkgName }}/internals/{{ .ModName }}/api/handler" 164 "{{ .PkgName }}/internals/{{ .ModName }}/domain" 165 "{{ .PkgName }}/internals/{{ .ModName }}/service" 166 "{{ .PkgName }}/internals/{{ .ModName }}/storage" 167 "{{ .PkgName }}/internals/{{ .ModName }}/web" 168 "{{ .PkgName }}/server/infra/db" 169 ) 170 171 func initialize{{ .ExportedName }}Handler() domain.{{ .ExportedName }}Handlers { 172 conn := db.GetSqliteConnection() 173 174 {{ .ModName }}Storage := storage.NewSqliteRepo(conn) 175 {{ .ModName }}Service := service.New{{ .ExportedName }}Service({{ .ModName }}Storage) 176 {{ .ModName }}Handler := handler.New{{ .ExportedName }}Handler({{ .ModName }}Service) 177 178 return {{ .ModName }}Handler 179 } 180 181 func SetupApiRoutes(rg *gsk.RouteGroup) { 182 {{ .ModName }}Handler := initialize{{ .ExportedName }}Handler() 183 184 {{ .ModName }}Routes := rg.RouteGroup("/{{ .ModName }}") 185 186 {{ .ModName }}Routes.Get("/", {{ .ModName }}Handler.{{ .ExportedName }}Handler) 187 } 188 189 func SetupWebRoutes(rg *gsk.RouteGroup) { 190 rg.Get("/{{ .ModName }}", web.HomeHandler) 191 } 192 `, 193 } 194 195 var INTERNALS_PING_SERR_PINGGO_MOD_TPL = Template{ 196 FilePath: "internals/ping/serr/ping.go", 197 Render: true, 198 Content: `package serr 199 200 import "errors" 201 202 var ( 203 Err{{ .ExportedName }}Failed = errors.New("{{ .ModName }} failed") 204 ) 205 `, 206 } 207 208 var INTERNALS_PING_WEB_PINGGO_MOD_TPL = Template{ 209 FilePath: "internals/ping/web/ping.go", 210 Render: true, 211 Content: `package web 212 213 import ( 214 "github.com/adharshmk96/stk/gsk" 215 ) 216 217 func HomeHandler(gc *gsk.Context) { 218 219 gc.TemplateResponse(&gsk.Tpl{ 220 TemplatePath: "public/templates/index.html", 221 Variables: gsk.Map{ 222 "Title": "{{ .ExportedName }}", 223 "Content": "Welcome to the {{ .ModName }} page!", 224 }, 225 }) 226 227 } 228 `, 229 } 230 231 var INTERNALS_PING_STORAGE_PINGGO_MOD_TPL = Template{ 232 FilePath: "internals/ping/storage/ping.go", 233 Render: true, 234 Content: `package storage 235 236 import ( 237 "database/sql" 238 "fmt" 239 240 "{{ .PkgName }}/internals/{{ .ModName }}/domain" 241 "{{ .PkgName }}/internals/{{ .ModName }}/serr" 242 "{{ .PkgName }}/server/infra" 243 ) 244 245 type sqliteRepo struct { 246 conn *sql.DB 247 } 248 249 func NewSqliteRepo(conn *sql.DB) domain.{{ .ExportedName }}Storage { 250 return &sqliteRepo{ 251 conn: conn, 252 } 253 } 254 255 func (s *sqliteRepo) {{ .ExportedName }}() error { 256 logger := infra.GetLogger() 257 rows, err := s.conn.Query(SELECT_ONE_TEST) 258 if err != nil { 259 return serr.Err{{ .ExportedName }}Failed 260 } 261 defer func(rows *sql.Rows) { 262 err := rows.Close() 263 if err != nil { 264 logger.Error("connection close failed.") 265 } 266 }(rows) 267 268 var result int 269 270 if rows.Next() { 271 err = rows.Scan(&result) 272 if err != nil { 273 return serr.Err{{ .ExportedName }}Failed 274 } 275 } else { 276 return serr.Err{{ .ExportedName }}Failed 277 } 278 279 logger.Info(fmt.Sprintf("connection result: %d", result)) 280 return nil 281 } 282 `, 283 } 284 285 var INTERNALS_PING_STORAGE_PINGQUERIESGO_MOD_TPL = Template{ 286 FilePath: "internals/ping/storage/pingQueries.go", 287 Render: true, 288 Content: `package storage 289 290 const ( 291 SELECT_ONE_TEST = "SELECT 1" 292 ) 293 `, 294 } 295 296 var INTERNALS_PING_API_HANDLER_PING_TESTGO_MOD_TPL = Template{ 297 FilePath: "internals/ping/api/handler/ping_test.go", 298 Render: true, 299 Content: `package handler_test 300 301 // run the following command to generate mocks for {{ .ExportedName }} interfaces 302 // 303 // mockery --dir=internals/{{ .ModName }}/{{ .ModName }} --name=^{{ .ExportedName }}.* 304 305 import ( 306 "net/http" 307 "testing" 308 309 "{{ .PkgName }}/internals/{{ .ModName }}/api/handler" 310 311 "github.com/adharshmk96/stk/gsk" 312 "{{ .PkgName }}/mocks" 313 "github.com/stretchr/testify/assert" 314 ) 315 316 func Test{{ .ExportedName }}Handler(t *testing.T) { 317 t.Run("{{ .ExportedName }} Handler returns 200", func(t *testing.T) { 318 319 // Arrange 320 s := gsk.New() 321 service := mocks.New{{ .ExportedName }}Service(t) 322 service.On("{{ .ExportedName }}Service").Return("pong", nil) 323 324 {{ .ModName }}Handler := handler.New{{ .ExportedName }}Handler(service) 325 326 s.Get("/{{ .ModName }}", {{ .ModName }}Handler.{{ .ExportedName }}Handler) 327 328 // Act 329 w, _ := s.Test("GET", "/{{ .ModName }}", nil) 330 331 // Assert 332 assert.Equal(t, http.StatusOK, w.Code) 333 }) 334 } 335 `, 336 } 337 338 var INTERNALS_PING_API_HANDLER_PINGGO_MOD_TPL = Template{ 339 FilePath: "internals/ping/api/handler/ping.go", 340 Render: true, 341 Content: `package handler 342 343 import ( 344 "net/http" 345 346 "{{ .PkgName }}/internals/{{ .ModName }}/domain" 347 348 "github.com/adharshmk96/stk/gsk" 349 ) 350 351 type {{ .ModName }}Handler struct { 352 service domain.{{ .ExportedName }}Service 353 } 354 355 func New{{ .ExportedName }}Handler(service domain.{{ .ExportedName }}Service) domain.{{ .ExportedName }}Handlers { 356 return &{{ .ModName }}Handler{ 357 service: service, 358 } 359 } 360 361 /* 362 {{ .ExportedName }}Handler returns {{ .ModName }} 200 response 363 Response: 364 - 200: OK 365 - 500: Internal Server Error 366 */ 367 func (h *{{ .ModName }}Handler) {{ .ExportedName }}Handler(gc *gsk.Context) { 368 369 message, err := h.service.{{ .ExportedName }}Service() 370 if err != nil { 371 gc.Status(http.StatusInternalServerError).JSONResponse(gsk.Map{ 372 "error": err.Error(), 373 }) 374 return 375 } 376 377 gc.Status(http.StatusOK).JSONResponse(gsk.Map{ 378 "message": message, 379 }) 380 } 381 `, 382 } 383 384 var INTERNALS_PING_API_TRANSPORT_PINGGO_MOD_TPL = Template{ 385 FilePath: "internals/ping/api/transport/ping.go", 386 Render: true, 387 Content: `package transport 388 `, 389 } 390 391 var INTERNALS_PING_SERVICE_PING_TESTGO_MOD_TPL = Template{ 392 FilePath: "internals/ping/service/ping_test.go", 393 Render: true, 394 Content: `package service_test 395 396 // run the following command to generate mocks for {{ .ExportedName }}Storage and {{ .ExportedName }} interfaces 397 // 398 // mockery --dir=internals/{{ .ModName }}/{{ .ModName }} --name=^{{ .ExportedName }}.* 399 400 import ( 401 "testing" 402 403 "{{ .PkgName }}/internals/{{ .ModName }}/service" 404 "{{ .PkgName }}/mocks" 405 "github.com/stretchr/testify/assert" 406 ) 407 408 func Test{{ .ExportedName }}Service(t *testing.T) { 409 t.Run("{{ .ExportedName }}Service returns pong", func(t *testing.T) { 410 411 // Arrange 412 storage := mocks.New{{ .ExportedName }}Storage(t) 413 storage.On("{{ .ExportedName }}").Return(nil) 414 415 svc := service.New{{ .ExportedName }}Service(storage) 416 417 // Act 418 msg, err := svc.{{ .ExportedName }}Service() 419 420 // Assert 421 assert.NoError(t, err) 422 assert.Equal(t, "pong", msg) 423 }) 424 } 425 `, 426 } 427 428 var INTERNALS_PING_SERVICE_PINGGO_MOD_TPL = Template{ 429 FilePath: "internals/ping/service/ping.go", 430 Render: true, 431 Content: `package service 432 433 import ( 434 "{{ .PkgName }}/internals/{{ .ModName }}/domain" 435 ) 436 437 type {{ .ModName }}Service struct { 438 storage domain.{{ .ExportedName }}Storage 439 } 440 441 func New{{ .ExportedName }}Service(storage domain.{{ .ExportedName }}Storage) domain.{{ .ExportedName }}Service { 442 return &{{ .ModName }}Service{ 443 storage: storage, 444 } 445 } 446 447 func (s *{{ .ModName }}Service) {{ .ExportedName }}Service() (string, error) { 448 err := s.storage.{{ .ExportedName }}() 449 if err != nil { 450 return "", err 451 } 452 return "pong", nil 453 } 454 `, 455 } 456 457 var INTERNALS_PING_DOMAIN_HANDLERGO_MOD_TPL = Template{ 458 FilePath: "internals/ping/domain/handler.go", 459 Render: true, 460 Content: `package domain 461 462 import "github.com/adharshmk96/stk/gsk" 463 464 // Handler 465 type {{ .ExportedName }}Handlers interface { 466 {{ .ExportedName }}Handler(gc *gsk.Context) 467 } 468 `, 469 } 470 471 var INTERNALS_PING_DOMAIN_SERVICEGO_MOD_TPL = Template{ 472 FilePath: "internals/ping/domain/service.go", 473 Render: true, 474 Content: `package domain 475 476 // Service 477 type {{ .ExportedName }}Service interface { 478 {{ .ExportedName }}Service() (string, error) 479 } 480 `, 481 } 482 483 var INTERNALS_PING_DOMAIN_STORAGEGO_MOD_TPL = Template{ 484 FilePath: "internals/ping/domain/storage.go", 485 Render: true, 486 Content: `package domain 487 488 // Storage 489 type {{ .ExportedName }}Storage interface { 490 {{ .ExportedName }}() error 491 } 492 `, 493 } 494 495 var INTERNALS_PING_DOMAIN_PINGGO_MOD_TPL = Template{ 496 FilePath: "internals/ping/domain/ping.go", 497 Render: true, 498 Content: `package domain 499 500 // Domain 501 type {{ .ExportedName }}Data struct { 502 {{ .ModName }} string 503 } 504 `, 505 } 506 507 var ModuleTemplates = []Template{ 508 MOCKS_PINGSERVICEGO_MOD_TPL, 509 MOCKS_PINGSTORAGEGO_MOD_TPL, 510 MOCKS_PINGHANDLERSGO_MOD_TPL, 511 SERVER_ROUTING_PINGGO_MOD_TPL, 512 INTERNALS_PING_ROUTESGO_MOD_TPL, 513 INTERNALS_PING_SERR_PINGGO_MOD_TPL, 514 INTERNALS_PING_WEB_PINGGO_MOD_TPL, 515 INTERNALS_PING_STORAGE_PINGGO_MOD_TPL, 516 INTERNALS_PING_STORAGE_PINGQUERIESGO_MOD_TPL, 517 INTERNALS_PING_API_HANDLER_PING_TESTGO_MOD_TPL, 518 INTERNALS_PING_API_HANDLER_PINGGO_MOD_TPL, 519 INTERNALS_PING_API_TRANSPORT_PINGGO_MOD_TPL, 520 INTERNALS_PING_SERVICE_PING_TESTGO_MOD_TPL, 521 INTERNALS_PING_SERVICE_PINGGO_MOD_TPL, 522 INTERNALS_PING_DOMAIN_HANDLERGO_MOD_TPL, 523 INTERNALS_PING_DOMAIN_SERVICEGO_MOD_TPL, 524 INTERNALS_PING_DOMAIN_STORAGEGO_MOD_TPL, 525 INTERNALS_PING_DOMAIN_PINGGO_MOD_TPL, 526 }