• Тестирование с реальной БД?

    @0xsetup Автор вопроса
    Как я использую tHelper в тесте userHandlers:
    code
    type HandlersSuite struct {
    	suite.Suite
    	Helper *tHelper.THelper
    }
    
    func (suite *HandlersSuite) SetupSuite() {
    	// Выполняет действие перед запуском всех тестов в пакете
    	h, err := tHelper.SetupPostgresSQL(context.Background())
    	if err != nil {
    		suite.T().Fatal("failed to create docker container:", err)
    	}
    
    	suite.Helper = h
    }
    
    func (suite *HandlersSuite) TearDownSuite() {
    	// Выполняет действие после завершения всех тестов
    	if err := suite.Helper.RemoveContainer(); err != nil {
    		suite.T().Fatal("failed to remove docker container:", err)
    	}
    }
    
    func (suite *HandlersSuite) SetupTest() {
    	// Выполняет действие перед каждым тестом
    	if err := suite.Helper.MigrateUp(); err != nil {
    		suite.T().Fatal("failed to migrate up postgres:", err)
    	}
    }
    
    func (suite *HandlersSuite) TearDownTest() {
    	// Выполняет действие после каждого теста
    	if err := suite.Helper.MigrateDown(); err != nil {
    		suite.T().Fatal("failed to migrate down postgres:", err)
    	}
    }
    
    func TestHandlersSuite(t *testing.T) {
    	suite.Run(t, new(HandlersSuite))
    }
    
    func (suite *HandlersSuite) TestHandlers_Save() {
    	endpoint := "/api/v1/users/sign-up"
    	
    	cfg := suite.Helper.GetConfig()
    
    	uRepo := repository.NewUsersRepository(suite.Helper.GetPostgresPool())
    	rRepo := roleRepo.NewRolesRepository(suite.Helper.GetPostgresPool())
    	rSessionsRepo := refreshSessionsRepo.NewRefreshSessionsRepository(suite.Helper.GetPostgresPool())
    	activateCodesRepo := activationCodesRepo.NewActivationCodesRepository(suite.Helper.GetPostgresPool())
    	ramblerSMTP := sender.NewRamblerSender(cfg.RamblerSMTP.Host, cfg.RamblerSMTP.Port, cfg.RamblerSMTP.Email, cfg.RamblerSMTP.Password)
    
    	jwtManager, err := jwtAuth.New(cfg.JWT.Secret, cfg.JWT.AccessTTL, cfg.JWT.RefreshTTL)
    	if err != nil {
    		suite.T().Fatal("failed to initialization jwt manager")
    	}
    
    	v, err := valid.Init()
    	if err != nil {
    		suite.T().Fatal("failed to initialization valid")
    	}
    
    	uService := service.NewUsersManager(uRepo, rRepo, rSessionsRepo, activateCodesRepo, ramblerSMTP, jwtManager)
    	h := NewHandlers(uService, v)
    
    	e := echo.New()
    	e.POST(endpoint, h.SignUp())
    
    	tests := []struct {
    		name           string
    		payload        map[string]interface{}
    		wantID         int
    		wantStatusCode int
    	}{
    		{
    			"ok",
    			map[string]interface{}{
    				"username": "wergtwetgwegew",
    				"email":    "userewftwegwgwegtest@example.com",
    				"password": "userteswegwegweegtpassword",
    			},
    			1,
    			http.StatusCreated,
    		},
    	}
    
    	for _, tt := range tests {
    		suite.Run(tt.name, func() {
    			b := &bytes.Buffer{}
    
    			err := json.NewEncoder(b).Encode(tt.payload)
    			if err != nil {
    				suite.T().Fatal("failed to encode:")
    			}
    
    			w := httptest.NewRecorder()
    			r := httptest.NewRequest(echo.POST, endpoint, b)
    			r.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON)
    
    			e.ServeHTTP(w, r)
    
    			suite.Equal(tt.wantStatusCode, w.Code)
    		})
    	}
    }
    Написано
  • Изображение на бэкенде?

    @0xsetup Автор вопроса
    насчёт "или распределить нагрузку на несколько серверов" получается у меня есть основной сервер, на котором код и все изображения, а я покупаю новый сервер и с помощью nginx распределяю?

    Простите, если тупой вопрос, я просто пока на уровне стажера скажем так, только учусь
    Написано
  • Изображение на бэкенде?

    @0xsetup Автор вопроса
    благодарю
    Написано
  • Изображение на бэкенде?

    @0xsetup Автор вопроса
    Everything_is_bad, убрал. просто бэк на rest api
    Написано
  • Автоматическое закрытия сделки?

    @0xsetup Автор вопроса
    Vitsliputsli, все-таки да. больше себя ощущаю не админом БД. в коде проще фиксануть что-либо
    Написано
  • Автоматическое закрытия сделки?

    @0xsetup Автор вопроса
    mayton2019, на самом деле команды нет. я сам для портфолио решил сделать себе. с PG идея интересная, в инете погуглю
    Написано
  • Автоматическое закрытия сделки?

    @0xsetup Автор вопроса
    mayton2019, мне еще нужно сделать начисление баланса другому юзеру и все такое. лучше на БД положить эту задачу или на гошку?
    Написано
  • Автоматическое закрытия сделки?

    @0xsetup Автор вопроса
    да я про ЯП ничего не говорю. просто на гошке пишу бэк и задумался над этим
    Написано
  • Автоматическое закрытия сделки?

    @0xsetup Автор вопроса
    mayton2019, PostgreSQL
    Написано
  • Баг с FSM с telebot?

    @0xsetup Автор вопроса
    shurshur, вот полный код:
    code
    func (h *Handlers) AddCategoryHandler() tele.HandlerFunc {
    	return func(tb tele.Context) error {
    		ctx := context.Background()
    		senderID := int(tb.Sender().ID)
    
    		if err := h.fsm.SetState(ctx, senderID, fsm.InputAddCategoryState); err != nil {
    			h.logger.Err(err).Msg("failed to set state")
    			return tb.Respond(&tele.CallbackResponse{
    				CallbackID: tb.Callback().ID,
    				Text:       messages.InternalErrorStr,
    				ShowAlert:  false,
    				URL:        "",
    			})
    		}
    
    		selector.Inline(selector.Row(BackBtn))
    		if err := tb.EditCaption("<b> Работа с категориями</b>\n\nℹ️ Введите название категории:", selector); err != nil {
    			h.logger.Err(err).Msg("failed to send message")
    			return nil
    		}
    
    		tb.Bot().Handle(tele.OnText, func(tbText tele.Context) error {
    			currentState, err := h.fsm.GetState(ctx, senderID)
    			if err != nil {
    				h.logger.Err(err).Msg("failed to get state")
    				return tb.Respond(&tele.CallbackResponse{
    					CallbackID: tb.Callback().ID,
    					Text:       messages.InternalErrorStr,
    					ShowAlert:  false,
    					URL:        "",
    				})
    			}
    
    			if currentState != fsm.InputAddCategoryState {
    				return nil
    			}
    
    			categoryName := strings.TrimSpace(tbText.Message().Text)
    
    			if err = tbText.Delete(); err != nil {
    				h.logger.Err(err).Msg("failed to delete message")
    
    				return tb.Respond(&tele.CallbackResponse{
    					CallbackID: tb.Callback().ID,
    					Text:       messages.InternalErrorStr,
    					ShowAlert:  false,
    					URL:        "",
    				})
    			}
    
    			if err = h.categoriesService.CategoryWebService.Save(ctx, categoryName); err != nil {
    				if err = h.fsm.SetState(ctx, senderID, fsm.StartState); err != nil {
    					h.logger.Err(err).Msg("failed to set state")
    					return tb.Respond(&tele.CallbackResponse{
    						CallbackID: tb.Callback().ID,
    						Text:       messages.InternalErrorStr,
    						ShowAlert:  false,
    						URL:        "",
    					})
    				}
    
    				h.logger.Err(err).Msg("failed to save new category")
    
    				return tb.EditCaption(messages.InternalErrorStr, selector)
    			}
    
    			if err = h.fsm.SetState(ctx, senderID, fsm.StartState); err != nil {
    				h.logger.Err(err).Msg("failed to set state")
    				return tb.Respond(&tele.CallbackResponse{
    					CallbackID: tb.Callback().ID,
    					Text:       messages.InternalErrorStr,
    					ShowAlert:  false,
    					URL:        "",
    				})
    			}
    
    			selector.Inline(selector.Row(BackAdminPanelBtn))
    
    			return tb.EditCaption(fmt.Sprintf("✅ Новая категория с именем <b>%s</b> успешно добавлена!", categoryName), selector)
    		})
    
    		tb.Bot().Handle(&BackBtn, func(tb tele.Context) error {
    			if err := h.fsm.SetState(ctx, senderID, fsm.StartState); err != nil {
    				h.logger.Err(err).Msg("failed to set state")
    				return tb.Respond(&tele.CallbackResponse{
    					CallbackID: tb.Callback().ID,
    					Text:       messages.InternalErrorStr,
    					ShowAlert:  false,
    					URL:        "",
    				})
    			}
    
    			return h.categoryPanel(tb)
    		})
    
    		return nil
    	}
    }
    Написано
  • Баг с FSM с telebot?

    @0xsetup Автор вопроса
    shurshur, Такое случается, когда в обработчике я начинаю принимать данные от пользователей и сменяются состояния.
    Написано
  • Могу ли я таким образом связать телеграмм бота, приложение, и базу на sqlite3?

    @0xsetup
    Matox, по идеи да. просто подними веб сервер с такой же БД и юзай ее
    Написано