add product category
This commit is contained in:
parent
03743711bc
commit
caf41e81e0
97
api/product_category.go
Normal file
97
api/product_category.go
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
db "git.nochill.in/nochill/naice_pos/db/sqlc"
|
||||||
|
"git.nochill.in/nochill/naice_pos/token"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type createProductCategoryRequest struct {
|
||||||
|
MerchantID uuid.UUID `json:"merchant_id" binding:"required"`
|
||||||
|
Name string `json:"name" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (server *Server) createProductCategory(ctx *gin.Context) {
|
||||||
|
var req createProductCategoryRequest
|
||||||
|
|
||||||
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||||
|
ctx.JSON(http.StatusBadRequest, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
|
||||||
|
arg := db.CreateProductCategoryParams{
|
||||||
|
MerchantID: authPayload.MerchantID,
|
||||||
|
Name: req.Name,
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductCategory, err := server.store.CreateProductCategory(ctx, arg)
|
||||||
|
if err != nil {
|
||||||
|
ctx.JSON(http.StatusInternalServerError, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(http.StatusOK, ProductCategory)
|
||||||
|
}
|
||||||
|
|
||||||
|
type listProductCategoriesRequest struct {
|
||||||
|
PageID int32 `form:"page_id" binding:"required,min=1"`
|
||||||
|
PageSize int32 `form:"page_size" binding:"required,min=5"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (server *Server) listProductCategories(ctx *gin.Context) {
|
||||||
|
var req listProductCategoriesRequest
|
||||||
|
if err := ctx.ShouldBindQuery(&req); err != nil {
|
||||||
|
ctx.JSON(http.StatusBadRequest, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
|
||||||
|
arg := db.ListProductCategoriesByMerchantIDParams{
|
||||||
|
MerchantID: authPayload.MerchantID,
|
||||||
|
Limit: req.PageSize,
|
||||||
|
Offset: (req.PageID - 1) * req.PageSize,
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductCategories, err := server.store.ListProductCategoriesByMerchantID(ctx, arg)
|
||||||
|
if err != nil {
|
||||||
|
ctx.JSON(http.StatusInternalServerError, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(http.StatusOK, ProductCategories)
|
||||||
|
}
|
||||||
|
|
||||||
|
type updateProductCategoryRequest struct {
|
||||||
|
ProductCategoryID uuid.UUID `json:"ProductCategory_id" binding:"required"`
|
||||||
|
Name string `json:"name" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (server *Server) updateProductCategory(ctx *gin.Context) {
|
||||||
|
var req updateProductCategoryRequest
|
||||||
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||||
|
ctx.JSON(http.StatusBadRequest, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
arg := db.UpdateProductCategoryParams{
|
||||||
|
ID: req.ProductCategoryID,
|
||||||
|
Name: req.Name,
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductCategory, err := server.store.UpdateProductCategory(ctx, arg)
|
||||||
|
if err != nil {
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
ctx.JSON(http.StatusNotFound, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.JSON(http.StatusInternalServerError, errorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(http.StatusOK, ProductCategory)
|
||||||
|
}
|
89
api/product_category_test.go
Normal file
89
api/product_category_test.go
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
mockdb "git.nochill.in/nochill/naice_pos/db/mock"
|
||||||
|
db "git.nochill.in/nochill/naice_pos/db/sqlc"
|
||||||
|
"git.nochill.in/nochill/naice_pos/token"
|
||||||
|
"git.nochill.in/nochill/naice_pos/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/golang/mock/gomock"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCreateProductCategory(t *testing.T) {
|
||||||
|
productCategory := createRandomProductCategory(t)
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
body gin.H
|
||||||
|
setupAuth func(t *testing.T, request *http.Request, tokenMaker token.Maker)
|
||||||
|
buildStubs func(store *mockdb.MockStore)
|
||||||
|
checkResponse func(recorder *httptest.ResponseRecorder)
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "OK",
|
||||||
|
body: gin.H{
|
||||||
|
"name": productCategory.Name,
|
||||||
|
"merchant_id": productCategory.MerchantID,
|
||||||
|
},
|
||||||
|
setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
|
||||||
|
addAuthorization(t, request, tokenMaker, authorizationTypeBearer, util.RandomEmail(), "a848090f-0409-4386-9caa-929ae6874dbb", time.Minute)
|
||||||
|
},
|
||||||
|
buildStubs: func(store *mockdb.MockStore) {
|
||||||
|
arg := db.CreateProductCategoryParams{
|
||||||
|
MerchantID: uuid.MustParse("a848090f-0409-4386-9caa-929ae6874dbb"),
|
||||||
|
Name: productCategory.Name,
|
||||||
|
}
|
||||||
|
store.EXPECT().
|
||||||
|
CreateProductCategory(gomock.Any(), gomock.Eq(arg)).
|
||||||
|
Times(1).
|
||||||
|
Return(productCategory, nil)
|
||||||
|
},
|
||||||
|
checkResponse: func(recorder *httptest.ResponseRecorder) {
|
||||||
|
require.Equal(t, http.StatusOK, recorder.Code)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range testCases {
|
||||||
|
tc := testCases[i]
|
||||||
|
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
|
||||||
|
data, err := json.Marshal(tc.body)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
store := mockdb.NewMockStore(ctrl)
|
||||||
|
tc.buildStubs(store)
|
||||||
|
|
||||||
|
server := newTestServer(t, store)
|
||||||
|
recorder := httptest.NewRecorder()
|
||||||
|
|
||||||
|
url := "/api/product/category"
|
||||||
|
request, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(data))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
tc.setupAuth(t, request, server.tokenMaker)
|
||||||
|
server.router.ServeHTTP(recorder, request)
|
||||||
|
tc.checkResponse(recorder)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func createRandomProductCategory(t *testing.T) db.ProductCategory {
|
||||||
|
return db.ProductCategory{
|
||||||
|
ID: uuid.New(),
|
||||||
|
MerchantID: uuid.MustParse("a848090f-0409-4386-9caa-929ae6874dbb"),
|
||||||
|
Name: util.RandomString(5),
|
||||||
|
}
|
||||||
|
}
|
@ -44,6 +44,11 @@ func (server *Server) getRoutes() {
|
|||||||
apiRoutes.PATCH("/products", server.updateProduct)
|
apiRoutes.PATCH("/products", server.updateProduct)
|
||||||
apiRoutes.GET("/product/:id", server.getProduct)
|
apiRoutes.GET("/product/:id", server.getProduct)
|
||||||
|
|
||||||
|
apiRoutes.POST("/product/category", server.createProductCategory)
|
||||||
|
apiRoutes.GET("/product/categories", server.listProductCategories)
|
||||||
|
apiRoutes.PATCH("/product/category", server.updateProductCategory)
|
||||||
|
// apiRoutes.DELETE("/product/category/:id", server.)
|
||||||
|
|
||||||
apiRoutes.POST("/suppliers", server.createSupplier)
|
apiRoutes.POST("/suppliers", server.createSupplier)
|
||||||
|
|
||||||
apiRoutes.POST("/purchase-products", server.createPurchase)
|
apiRoutes.POST("/purchase-products", server.createPurchase)
|
||||||
|
@ -16,6 +16,7 @@ CREATE TABLE merchants (
|
|||||||
"created_at" timestamp default(now()),
|
"created_at" timestamp default(now()),
|
||||||
"updated_at" timestamp default(now())
|
"updated_at" timestamp default(now())
|
||||||
);
|
);
|
||||||
|
|
||||||
create table suppliers (
|
create table suppliers (
|
||||||
"id" uuid default gen_random_uuid() primary key not null,
|
"id" uuid default gen_random_uuid() primary key not null,
|
||||||
"index_id" bigserial not null,
|
"index_id" bigserial not null,
|
||||||
@ -47,6 +48,7 @@ CREATE TABLE products (
|
|||||||
"created_at" timestamp default(now()),
|
"created_at" timestamp default(now()),
|
||||||
"updated_at" timestamp default(now())
|
"updated_at" timestamp default(now())
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE purchase_order (
|
CREATE TABLE purchase_order (
|
||||||
"id" uuid default gen_random_uuid() primary key not null,
|
"id" uuid default gen_random_uuid() primary key not null,
|
||||||
"supplier_id" uuid references "suppliers"("id") not null,
|
"supplier_id" uuid references "suppliers"("id") not null,
|
||||||
|
3
db/migrations/000003_create_product_categories.down.sql
Normal file
3
db/migrations/000003_create_product_categories.down.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ALTER TABLE "products" DROP COLUMN "product_category_id";
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS product_categories;
|
8
db/migrations/000003_create_product_categories.up.sql
Normal file
8
db/migrations/000003_create_product_categories.up.sql
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE product_categories (
|
||||||
|
"id" uuid default gen_random_uuid() primary key not null,
|
||||||
|
"merchant_id" uuid references "merchants"("id") not null,
|
||||||
|
"index_id" bigserial not null,
|
||||||
|
"name" varchar not null
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE "products" ADD COLUMN "product_category_id" uuid NOT NULL DEFAULT gen_random_uuid();
|
104
db/mock/store.go
104
db/mock/store.go
@ -81,6 +81,21 @@ func (mr *MockStoreMockRecorder) CreateProduct(arg0, arg1 interface{}) *gomock.C
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProduct", reflect.TypeOf((*MockStore)(nil).CreateProduct), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProduct", reflect.TypeOf((*MockStore)(nil).CreateProduct), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateProductCategory mocks base method.
|
||||||
|
func (m *MockStore) CreateProductCategory(arg0 context.Context, arg1 db.CreateProductCategoryParams) (db.ProductCategory, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "CreateProductCategory", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(db.ProductCategory)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateProductCategory indicates an expected call of CreateProductCategory.
|
||||||
|
func (mr *MockStoreMockRecorder) CreateProductCategory(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateProductCategory", reflect.TypeOf((*MockStore)(nil).CreateProductCategory), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// CreatePurchaseOrder mocks base method.
|
// CreatePurchaseOrder mocks base method.
|
||||||
func (m *MockStore) CreatePurchaseOrder(arg0 context.Context, arg1 db.CreatePurchaseOrderParams) (db.PurchaseOrder, error) {
|
func (m *MockStore) CreatePurchaseOrder(arg0 context.Context, arg1 db.CreatePurchaseOrderParams) (db.PurchaseOrder, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -214,6 +229,20 @@ func (mr *MockStoreMockRecorder) DeleteProduct(arg0, arg1 interface{}) *gomock.C
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProduct", reflect.TypeOf((*MockStore)(nil).DeleteProduct), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProduct", reflect.TypeOf((*MockStore)(nil).DeleteProduct), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteProductCategory mocks base method.
|
||||||
|
func (m *MockStore) DeleteProductCategory(arg0 context.Context, arg1 uuid.UUID) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "DeleteProductCategory", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteProductCategory indicates an expected call of DeleteProductCategory.
|
||||||
|
func (mr *MockStoreMockRecorder) DeleteProductCategory(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProductCategory", reflect.TypeOf((*MockStore)(nil).DeleteProductCategory), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteSupplier mocks base method.
|
// DeleteSupplier mocks base method.
|
||||||
func (m *MockStore) DeleteSupplier(arg0 context.Context, arg1 uuid.UUID) error {
|
func (m *MockStore) DeleteSupplier(arg0 context.Context, arg1 uuid.UUID) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -288,6 +317,36 @@ func (mr *MockStoreMockRecorder) GetProduct(arg0, arg1 interface{}) *gomock.Call
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProduct", reflect.TypeOf((*MockStore)(nil).GetProduct), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProduct", reflect.TypeOf((*MockStore)(nil).GetProduct), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPurchaseOrderById mocks base method.
|
||||||
|
func (m *MockStore) GetPurchaseOrderById(arg0 context.Context, arg1 uuid.UUID) (db.PurchaseOrder, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "GetPurchaseOrderById", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(db.PurchaseOrder)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPurchaseOrderById indicates an expected call of GetPurchaseOrderById.
|
||||||
|
func (mr *MockStoreMockRecorder) GetPurchaseOrderById(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPurchaseOrderById", reflect.TypeOf((*MockStore)(nil).GetPurchaseOrderById), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPurchaseOrderDetailsByPuchaseOrderId mocks base method.
|
||||||
|
func (m *MockStore) GetPurchaseOrderDetailsByPuchaseOrderId(arg0 context.Context, arg1 uuid.UUID) (db.PurchaseOrderDetail, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "GetPurchaseOrderDetailsByPuchaseOrderId", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(db.PurchaseOrderDetail)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPurchaseOrderDetailsByPuchaseOrderId indicates an expected call of GetPurchaseOrderDetailsByPuchaseOrderId.
|
||||||
|
func (mr *MockStoreMockRecorder) GetPurchaseOrderDetailsByPuchaseOrderId(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPurchaseOrderDetailsByPuchaseOrderId", reflect.TypeOf((*MockStore)(nil).GetPurchaseOrderDetailsByPuchaseOrderId), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// GetSession mocks base method.
|
// GetSession mocks base method.
|
||||||
func (m *MockStore) GetSession(arg0 context.Context, arg1 uuid.UUID) (db.UserSession, error) {
|
func (m *MockStore) GetSession(arg0 context.Context, arg1 uuid.UUID) (db.UserSession, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -348,6 +407,21 @@ func (mr *MockStoreMockRecorder) GetUserById(arg0, arg1 interface{}) *gomock.Cal
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserById", reflect.TypeOf((*MockStore)(nil).GetUserById), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserById", reflect.TypeOf((*MockStore)(nil).GetUserById), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListProductCategoriesByMerchantID mocks base method.
|
||||||
|
func (m *MockStore) ListProductCategoriesByMerchantID(arg0 context.Context, arg1 db.ListProductCategoriesByMerchantIDParams) ([]db.ProductCategory, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ListProductCategoriesByMerchantID", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].([]db.ProductCategory)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListProductCategoriesByMerchantID indicates an expected call of ListProductCategoriesByMerchantID.
|
||||||
|
func (mr *MockStoreMockRecorder) ListProductCategoriesByMerchantID(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListProductCategoriesByMerchantID", reflect.TypeOf((*MockStore)(nil).ListProductCategoriesByMerchantID), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// ListProducts mocks base method.
|
// ListProducts mocks base method.
|
||||||
func (m *MockStore) ListProducts(arg0 context.Context, arg1 db.ListProductsParams) ([]db.Product, error) {
|
func (m *MockStore) ListProducts(arg0 context.Context, arg1 db.ListProductsParams) ([]db.Product, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -363,6 +437,21 @@ func (mr *MockStoreMockRecorder) ListProducts(arg0, arg1 interface{}) *gomock.Ca
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListProducts", reflect.TypeOf((*MockStore)(nil).ListProducts), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListProducts", reflect.TypeOf((*MockStore)(nil).ListProducts), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListPurchaseOrderByMerchantId mocks base method.
|
||||||
|
func (m *MockStore) ListPurchaseOrderByMerchantId(arg0 context.Context, arg1 uuid.UUID) ([]db.PurchaseOrder, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ListPurchaseOrderByMerchantId", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].([]db.PurchaseOrder)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPurchaseOrderByMerchantId indicates an expected call of ListPurchaseOrderByMerchantId.
|
||||||
|
func (mr *MockStoreMockRecorder) ListPurchaseOrderByMerchantId(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPurchaseOrderByMerchantId", reflect.TypeOf((*MockStore)(nil).ListPurchaseOrderByMerchantId), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// PurchaseOrderTx mocks base method.
|
// PurchaseOrderTx mocks base method.
|
||||||
func (m *MockStore) PurchaseOrderTx(arg0 context.Context, arg1 db.PurchasoOrderTxParams) (db.PurchaseOrderTxResult, error) {
|
func (m *MockStore) PurchaseOrderTx(arg0 context.Context, arg1 db.PurchasoOrderTxParams) (db.PurchaseOrderTxResult, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -423,6 +512,21 @@ func (mr *MockStoreMockRecorder) UpdateProduct(arg0, arg1 interface{}) *gomock.C
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProduct", reflect.TypeOf((*MockStore)(nil).UpdateProduct), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProduct", reflect.TypeOf((*MockStore)(nil).UpdateProduct), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateProductCategory mocks base method.
|
||||||
|
func (m *MockStore) UpdateProductCategory(arg0 context.Context, arg1 db.UpdateProductCategoryParams) (db.ProductCategory, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "UpdateProductCategory", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(db.ProductCategory)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateProductCategory indicates an expected call of UpdateProductCategory.
|
||||||
|
func (mr *MockStoreMockRecorder) UpdateProductCategory(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateProductCategory", reflect.TypeOf((*MockStore)(nil).UpdateProductCategory), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateProductStock mocks base method.
|
// UpdateProductStock mocks base method.
|
||||||
func (m *MockStore) UpdateProductStock(arg0 context.Context, arg1 db.UpdateProductStockParams) error {
|
func (m *MockStore) UpdateProductStock(arg0 context.Context, arg1 db.UpdateProductStockParams) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
24
db/query/product_category.sql
Normal file
24
db/query/product_category.sql
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
-- name: CreateProductCategory :one
|
||||||
|
INSERT INTO product_categories (
|
||||||
|
merchant_id,
|
||||||
|
name
|
||||||
|
) VALUES (
|
||||||
|
$1, $2
|
||||||
|
)
|
||||||
|
RETURNING *;
|
||||||
|
|
||||||
|
-- name: ListProductCategoriesByMerchantID :many
|
||||||
|
SELECT * FROM product_categories
|
||||||
|
WHERE merchant_id = $1
|
||||||
|
ORDER BY index_id
|
||||||
|
LIMIT $2
|
||||||
|
OFFSET $3;
|
||||||
|
|
||||||
|
-- name: UpdateProductCategory :one
|
||||||
|
UPDATE product_categories
|
||||||
|
SET name = $1
|
||||||
|
WHERE id = $2
|
||||||
|
RETURNING *;
|
||||||
|
|
||||||
|
-- name: DeleteProductCategory :exec
|
||||||
|
DELETE FROM product_categories WHERE id = $1;
|
@ -11,3 +11,13 @@ INSERT INTO purchase_order (
|
|||||||
$1, $2, $3, $4, $5, $6, $7
|
$1, $2, $3, $4, $5, $6, $7
|
||||||
)
|
)
|
||||||
RETURNING *;
|
RETURNING *;
|
||||||
|
|
||||||
|
-- name: GetPurchaseOrderById :one
|
||||||
|
SELECT *
|
||||||
|
FROM purchase_order
|
||||||
|
WHERE id = $1;
|
||||||
|
|
||||||
|
-- name: ListPurchaseOrderByMerchantId :many
|
||||||
|
SELECT *
|
||||||
|
FROM purchase_order
|
||||||
|
WHERE merchant_id = $1;
|
@ -10,3 +10,8 @@ INSERT INTO purchase_order_detail (
|
|||||||
$1, $2, $3, $4, $5, $6
|
$1, $2, $3, $4, $5, $6
|
||||||
)
|
)
|
||||||
RETURNING *;
|
RETURNING *;
|
||||||
|
|
||||||
|
-- name: GetPurchaseOrderDetailsByPuchaseOrderId :one
|
||||||
|
SELECT *
|
||||||
|
FROM purchase_order_detail
|
||||||
|
WHERE purchase_order_id = $1;
|
@ -33,15 +33,23 @@ type Merchant struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Product struct {
|
type Product struct {
|
||||||
ID uuid.UUID `json:"id"`
|
ID uuid.UUID `json:"id"`
|
||||||
MerchantID uuid.UUID `json:"merchant_id"`
|
MerchantID uuid.UUID `json:"merchant_id"`
|
||||||
IndexID int64 `json:"index_id"`
|
IndexID int64 `json:"index_id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
SellingPrice float64 `json:"selling_price"`
|
SellingPrice float64 `json:"selling_price"`
|
||||||
PurchasePrice float64 `json:"purchase_price"`
|
PurchasePrice float64 `json:"purchase_price"`
|
||||||
Stock float64 `json:"stock"`
|
Stock float64 `json:"stock"`
|
||||||
CreatedAt sql.NullTime `json:"created_at"`
|
CreatedAt sql.NullTime `json:"created_at"`
|
||||||
UpdatedAt sql.NullTime `json:"updated_at"`
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
||||||
|
ProductCategoryID uuid.UUID `json:"product_category_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProductCategory struct {
|
||||||
|
ID uuid.UUID `json:"id"`
|
||||||
|
MerchantID uuid.UUID `json:"merchant_id"`
|
||||||
|
IndexID int64 `json:"index_id"`
|
||||||
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PurchaseOrder struct {
|
type PurchaseOrder struct {
|
||||||
|
114
db/sqlc/product_category.sql.go
Normal file
114
db/sqlc/product_category.sql.go
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.17.2
|
||||||
|
// source: product_category.sql
|
||||||
|
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
const createProductCategory = `-- name: CreateProductCategory :one
|
||||||
|
INSERT INTO product_categories (
|
||||||
|
merchant_id,
|
||||||
|
name
|
||||||
|
) VALUES (
|
||||||
|
$1, $2
|
||||||
|
)
|
||||||
|
RETURNING id, merchant_id, index_id, name
|
||||||
|
`
|
||||||
|
|
||||||
|
type CreateProductCategoryParams struct {
|
||||||
|
MerchantID uuid.UUID `json:"merchant_id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateProductCategory(ctx context.Context, arg CreateProductCategoryParams) (ProductCategory, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, createProductCategory, arg.MerchantID, arg.Name)
|
||||||
|
var i ProductCategory
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.MerchantID,
|
||||||
|
&i.IndexID,
|
||||||
|
&i.Name,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteProductCategory = `-- name: DeleteProductCategory :exec
|
||||||
|
DELETE FROM product_categories WHERE id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) DeleteProductCategory(ctx context.Context, id uuid.UUID) error {
|
||||||
|
_, err := q.db.ExecContext(ctx, deleteProductCategory, id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
const listProductCategoriesByMerchantID = `-- name: ListProductCategoriesByMerchantID :many
|
||||||
|
SELECT id, merchant_id, index_id, name FROM product_categories
|
||||||
|
WHERE merchant_id = $1
|
||||||
|
ORDER BY index_id
|
||||||
|
LIMIT $2
|
||||||
|
OFFSET $3
|
||||||
|
`
|
||||||
|
|
||||||
|
type ListProductCategoriesByMerchantIDParams struct {
|
||||||
|
MerchantID uuid.UUID `json:"merchant_id"`
|
||||||
|
Limit int32 `json:"limit"`
|
||||||
|
Offset int32 `json:"offset"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) ListProductCategoriesByMerchantID(ctx context.Context, arg ListProductCategoriesByMerchantIDParams) ([]ProductCategory, error) {
|
||||||
|
rows, err := q.db.QueryContext(ctx, listProductCategoriesByMerchantID, arg.MerchantID, arg.Limit, arg.Offset)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
items := []ProductCategory{}
|
||||||
|
for rows.Next() {
|
||||||
|
var i ProductCategory
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.MerchantID,
|
||||||
|
&i.IndexID,
|
||||||
|
&i.Name,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Close(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateProductCategory = `-- name: UpdateProductCategory :one
|
||||||
|
UPDATE product_categories
|
||||||
|
SET name = $1
|
||||||
|
WHERE id = $2
|
||||||
|
RETURNING id, merchant_id, index_id, name
|
||||||
|
`
|
||||||
|
|
||||||
|
type UpdateProductCategoryParams struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
ID uuid.UUID `json:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) UpdateProductCategory(ctx context.Context, arg UpdateProductCategoryParams) (ProductCategory, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, updateProductCategory, arg.Name, arg.ID)
|
||||||
|
var i ProductCategory
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.MerchantID,
|
||||||
|
&i.IndexID,
|
||||||
|
&i.Name,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
72
db/sqlc/product_category_test.go
Normal file
72
db/sqlc/product_category_test.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.nochill.in/nochill/naice_pos/util"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
var merchantID = uuid.MustParse("a848090f-0409-4386-9caa-929ae6874dbb")
|
||||||
|
|
||||||
|
func createRandomProductCategory(t *testing.T) ProductCategory {
|
||||||
|
arg := CreateProductCategoryParams{
|
||||||
|
MerchantID: merchantID,
|
||||||
|
Name: util.RandomString(6),
|
||||||
|
}
|
||||||
|
|
||||||
|
productCategory, err := testQueries.CreateProductCategory(context.Background(), arg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, productCategory.Name, arg.Name)
|
||||||
|
|
||||||
|
return productCategory
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateProductCategory(t *testing.T) {
|
||||||
|
createRandomProductCategory(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestListProductCategories(t *testing.T) {
|
||||||
|
tries := 5
|
||||||
|
for i := 0; i < tries; i++ {
|
||||||
|
createRandomProductCategory(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
arg := ListProductCategoriesByMerchantIDParams{
|
||||||
|
MerchantID: merchantID,
|
||||||
|
Limit: 5,
|
||||||
|
Offset: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
listProductCategories, err := testQueries.ListProductCategoriesByMerchantID(context.Background(), arg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
for _, productCategory := range listProductCategories {
|
||||||
|
require.NotEmpty(t, productCategory)
|
||||||
|
require.Equal(t, merchantID, productCategory.MerchantID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateProductCategory(t *testing.T) {
|
||||||
|
productCategory := createRandomProductCategory(t)
|
||||||
|
|
||||||
|
arg := UpdateProductCategoryParams{
|
||||||
|
Name: util.RandomString(5),
|
||||||
|
ID: productCategory.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
updatedProductCategory, err := testQueries.UpdateProductCategory(context.Background(), arg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.NotEqual(t, updatedProductCategory.Name, productCategory.Name)
|
||||||
|
require.Equal(t, arg.Name, updatedProductCategory.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteProductCategory(t *testing.T) {
|
||||||
|
productCategory := createRandomProductCategory(t)
|
||||||
|
|
||||||
|
err := testQueries.DeleteProductCategory(context.Background(), productCategory.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
@ -22,7 +22,7 @@ INSERT INTO products (
|
|||||||
) VALUES (
|
) VALUES (
|
||||||
$1, $2, $3, $4, $5
|
$1, $2, $3, $4, $5
|
||||||
)
|
)
|
||||||
RETURNING id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at
|
RETURNING id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at, product_category_id
|
||||||
`
|
`
|
||||||
|
|
||||||
type CreateProductParams struct {
|
type CreateProductParams struct {
|
||||||
@ -52,6 +52,7 @@ func (q *Queries) CreateProduct(ctx context.Context, arg CreateProductParams) (P
|
|||||||
&i.Stock,
|
&i.Stock,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
|
&i.ProductCategoryID,
|
||||||
)
|
)
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
@ -66,7 +67,7 @@ func (q *Queries) DeleteProduct(ctx context.Context, id uuid.UUID) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getProduct = `-- name: GetProduct :one
|
const getProduct = `-- name: GetProduct :one
|
||||||
SELECT id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at FROM products
|
SELECT id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at, product_category_id FROM products
|
||||||
WHERE id = $1
|
WHERE id = $1
|
||||||
`
|
`
|
||||||
|
|
||||||
@ -83,12 +84,13 @@ func (q *Queries) GetProduct(ctx context.Context, id uuid.UUID) (Product, error)
|
|||||||
&i.Stock,
|
&i.Stock,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
|
&i.ProductCategoryID,
|
||||||
)
|
)
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
const getStockForUpdateStock = `-- name: GetStockForUpdateStock :one
|
const getStockForUpdateStock = `-- name: GetStockForUpdateStock :one
|
||||||
SELECT id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at FROM products
|
SELECT id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at, product_category_id FROM products
|
||||||
WHERE id = $1
|
WHERE id = $1
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
FOR NO KEY UPDATE
|
FOR NO KEY UPDATE
|
||||||
@ -107,12 +109,13 @@ func (q *Queries) GetStockForUpdateStock(ctx context.Context, id uuid.UUID) (Pro
|
|||||||
&i.Stock,
|
&i.Stock,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
|
&i.ProductCategoryID,
|
||||||
)
|
)
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
const listProducts = `-- name: ListProducts :many
|
const listProducts = `-- name: ListProducts :many
|
||||||
SELECT id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at FROM products
|
SELECT id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at, product_category_id FROM products
|
||||||
WHERE merchant_id = $1
|
WHERE merchant_id = $1
|
||||||
ORDER BY index_id
|
ORDER BY index_id
|
||||||
LIMIT $2
|
LIMIT $2
|
||||||
@ -144,6 +147,7 @@ func (q *Queries) ListProducts(ctx context.Context, arg ListProductsParams) ([]P
|
|||||||
&i.Stock,
|
&i.Stock,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
|
&i.ProductCategoryID,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -162,7 +166,7 @@ const updateProduct = `-- name: UpdateProduct :one
|
|||||||
UPDATE products
|
UPDATE products
|
||||||
SET name = $2, selling_price = $3, purchase_price = $4, updated_at = $5
|
SET name = $2, selling_price = $3, purchase_price = $4, updated_at = $5
|
||||||
WHERE id = $1
|
WHERE id = $1
|
||||||
RETURNING id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at
|
RETURNING id, merchant_id, index_id, name, selling_price, purchase_price, stock, created_at, updated_at, product_category_id
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpdateProductParams struct {
|
type UpdateProductParams struct {
|
||||||
@ -192,6 +196,7 @@ func (q *Queries) UpdateProduct(ctx context.Context, arg UpdateProductParams) (P
|
|||||||
&i.Stock,
|
&i.Stock,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
|
&i.ProductCategoryID,
|
||||||
)
|
)
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
@ -63,3 +63,69 @@ func (q *Queries) CreatePurchaseOrder(ctx context.Context, arg CreatePurchaseOrd
|
|||||||
)
|
)
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getPurchaseOrderById = `-- name: GetPurchaseOrderById :one
|
||||||
|
SELECT id, supplier_id, merchant_id, index_id, code, is_paid, total, paid_nominal, note, created_at, updated_at
|
||||||
|
FROM purchase_order
|
||||||
|
WHERE id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetPurchaseOrderById(ctx context.Context, id uuid.UUID) (PurchaseOrder, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, getPurchaseOrderById, id)
|
||||||
|
var i PurchaseOrder
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.SupplierID,
|
||||||
|
&i.MerchantID,
|
||||||
|
&i.IndexID,
|
||||||
|
&i.Code,
|
||||||
|
&i.IsPaid,
|
||||||
|
&i.Total,
|
||||||
|
&i.PaidNominal,
|
||||||
|
&i.Note,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.UpdatedAt,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const listPurchaseOrderByMerchantId = `-- name: ListPurchaseOrderByMerchantId :many
|
||||||
|
SELECT id, supplier_id, merchant_id, index_id, code, is_paid, total, paid_nominal, note, created_at, updated_at
|
||||||
|
FROM purchase_order
|
||||||
|
WHERE merchant_id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) ListPurchaseOrderByMerchantId(ctx context.Context, merchantID uuid.UUID) ([]PurchaseOrder, error) {
|
||||||
|
rows, err := q.db.QueryContext(ctx, listPurchaseOrderByMerchantId, merchantID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
items := []PurchaseOrder{}
|
||||||
|
for rows.Next() {
|
||||||
|
var i PurchaseOrder
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.SupplierID,
|
||||||
|
&i.MerchantID,
|
||||||
|
&i.IndexID,
|
||||||
|
&i.Code,
|
||||||
|
&i.IsPaid,
|
||||||
|
&i.Total,
|
||||||
|
&i.PaidNominal,
|
||||||
|
&i.Note,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.UpdatedAt,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Close(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
@ -59,3 +59,28 @@ func (q *Queries) CreatePurchaseOrderDetail(ctx context.Context, arg CreatePurch
|
|||||||
)
|
)
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getPurchaseOrderDetailsByPuchaseOrderId = `-- name: GetPurchaseOrderDetailsByPuchaseOrderId :one
|
||||||
|
SELECT id, index_id, code, merchant_id, purchase_order_id, product_id, quantity, sub_total, product_price, created_at, updated_at
|
||||||
|
FROM purchase_order_detail
|
||||||
|
WHERE purchase_order_id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetPurchaseOrderDetailsByPuchaseOrderId(ctx context.Context, purchaseOrderID uuid.UUID) (PurchaseOrderDetail, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, getPurchaseOrderDetailsByPuchaseOrderId, purchaseOrderID)
|
||||||
|
var i PurchaseOrderDetail
|
||||||
|
err := row.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.IndexID,
|
||||||
|
&i.Code,
|
||||||
|
&i.MerchantID,
|
||||||
|
&i.PurchaseOrderID,
|
||||||
|
&i.ProductID,
|
||||||
|
&i.Quantity,
|
||||||
|
&i.SubTotal,
|
||||||
|
&i.ProductPrice,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.UpdatedAt,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
@ -14,6 +14,7 @@ type Querier interface {
|
|||||||
CreateCustomers(ctx context.Context, arg CreateCustomersParams) (Customer, error)
|
CreateCustomers(ctx context.Context, arg CreateCustomersParams) (Customer, error)
|
||||||
CreateMerchant(ctx context.Context, arg CreateMerchantParams) (Merchant, error)
|
CreateMerchant(ctx context.Context, arg CreateMerchantParams) (Merchant, error)
|
||||||
CreateProduct(ctx context.Context, arg CreateProductParams) (Product, error)
|
CreateProduct(ctx context.Context, arg CreateProductParams) (Product, error)
|
||||||
|
CreateProductCategory(ctx context.Context, arg CreateProductCategoryParams) (ProductCategory, error)
|
||||||
CreatePurchaseOrder(ctx context.Context, arg CreatePurchaseOrderParams) (PurchaseOrder, error)
|
CreatePurchaseOrder(ctx context.Context, arg CreatePurchaseOrderParams) (PurchaseOrder, error)
|
||||||
CreatePurchaseOrderDetail(ctx context.Context, arg CreatePurchaseOrderDetailParams) (PurchaseOrderDetail, error)
|
CreatePurchaseOrderDetail(ctx context.Context, arg CreatePurchaseOrderDetailParams) (PurchaseOrderDetail, error)
|
||||||
CreateSession(ctx context.Context, arg CreateSessionParams) (UserSession, error)
|
CreateSession(ctx context.Context, arg CreateSessionParams) (UserSession, error)
|
||||||
@ -22,19 +23,25 @@ type Querier interface {
|
|||||||
CustomersList(ctx context.Context, arg CustomersListParams) ([]Customer, error)
|
CustomersList(ctx context.Context, arg CustomersListParams) ([]Customer, error)
|
||||||
DeleteCustomer(ctx context.Context, id uuid.UUID) error
|
DeleteCustomer(ctx context.Context, id uuid.UUID) error
|
||||||
DeleteProduct(ctx context.Context, id uuid.UUID) error
|
DeleteProduct(ctx context.Context, id uuid.UUID) error
|
||||||
|
DeleteProductCategory(ctx context.Context, id uuid.UUID) error
|
||||||
DeleteSupplier(ctx context.Context, id uuid.UUID) error
|
DeleteSupplier(ctx context.Context, id uuid.UUID) error
|
||||||
GetMerchantById(ctx context.Context, id uuid.UUID) (Merchant, error)
|
GetMerchantById(ctx context.Context, id uuid.UUID) (Merchant, error)
|
||||||
GetMerchantByUserId(ctx context.Context, ownerID uuid.UUID) (Merchant, error)
|
GetMerchantByUserId(ctx context.Context, ownerID uuid.UUID) (Merchant, error)
|
||||||
GetPasswordByEmail(ctx context.Context, email string) (string, error)
|
GetPasswordByEmail(ctx context.Context, email string) (string, error)
|
||||||
GetProduct(ctx context.Context, id uuid.UUID) (Product, error)
|
GetProduct(ctx context.Context, id uuid.UUID) (Product, error)
|
||||||
|
GetPurchaseOrderById(ctx context.Context, id uuid.UUID) (PurchaseOrder, error)
|
||||||
|
GetPurchaseOrderDetailsByPuchaseOrderId(ctx context.Context, purchaseOrderID uuid.UUID) (PurchaseOrderDetail, error)
|
||||||
GetSession(ctx context.Context, id uuid.UUID) (UserSession, error)
|
GetSession(ctx context.Context, id uuid.UUID) (UserSession, error)
|
||||||
GetStockForUpdateStock(ctx context.Context, id uuid.UUID) (Product, error)
|
GetStockForUpdateStock(ctx context.Context, id uuid.UUID) (Product, error)
|
||||||
GetUserByEmail(ctx context.Context, email string) (User, error)
|
GetUserByEmail(ctx context.Context, email string) (User, error)
|
||||||
GetUserById(ctx context.Context, id uuid.UUID) (User, error)
|
GetUserById(ctx context.Context, id uuid.UUID) (User, error)
|
||||||
|
ListProductCategoriesByMerchantID(ctx context.Context, arg ListProductCategoriesByMerchantIDParams) ([]ProductCategory, error)
|
||||||
ListProducts(ctx context.Context, arg ListProductsParams) ([]Product, error)
|
ListProducts(ctx context.Context, arg ListProductsParams) ([]Product, error)
|
||||||
|
ListPurchaseOrderByMerchantId(ctx context.Context, merchantID uuid.UUID) ([]PurchaseOrder, error)
|
||||||
SuppliersList(ctx context.Context, arg SuppliersListParams) ([]Supplier, error)
|
SuppliersList(ctx context.Context, arg SuppliersListParams) ([]Supplier, error)
|
||||||
UpdateCustomer(ctx context.Context, id uuid.UUID) (Customer, error)
|
UpdateCustomer(ctx context.Context, id uuid.UUID) (Customer, error)
|
||||||
UpdateProduct(ctx context.Context, arg UpdateProductParams) (Product, error)
|
UpdateProduct(ctx context.Context, arg UpdateProductParams) (Product, error)
|
||||||
|
UpdateProductCategory(ctx context.Context, arg UpdateProductCategoryParams) (ProductCategory, error)
|
||||||
UpdateProductStock(ctx context.Context, arg UpdateProductStockParams) error
|
UpdateProductStock(ctx context.Context, arg UpdateProductStockParams) error
|
||||||
UpdateSupplier(ctx context.Context, id uuid.UUID) (Supplier, error)
|
UpdateSupplier(ctx context.Context, id uuid.UUID) (Supplier, error)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user