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  }