You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
403 lines
13 KiB
403 lines
13 KiB
B4J=true
|
|
Group=Handlers
|
|
ModulesStructureVersion=1
|
|
Type=Class
|
|
Version=9.1
|
|
@EndOfDesignText@
|
|
' Product Handler class
|
|
Sub Class_Globals
|
|
Dim Request As ServletRequest
|
|
Dim Response As ServletResponse
|
|
Dim pool As ConnectionPool
|
|
Dim Elements() As String
|
|
End Sub
|
|
|
|
Public Sub Initialize
|
|
|
|
End Sub
|
|
|
|
Sub Handle (req As ServletRequest, resp As ServletResponse)
|
|
Request = req
|
|
Response = resp
|
|
|
|
Elements = Regex.Split("/", req.RequestURI)
|
|
If CheckMaxElements = False Then
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
Return
|
|
End If
|
|
If CheckAllowedVerb = False Then
|
|
Utility.ReturnError("Method Not Allowed", 405, Response)
|
|
Return
|
|
End If
|
|
ProcessRequest
|
|
End Sub
|
|
|
|
Private Sub ProcessRequest
|
|
Select Case Request.Method.ToUpperCase
|
|
Case "GET"
|
|
Select Case Elements.Length - 1
|
|
Case Main.Element.Root ' /
|
|
|
|
Case Main.Element.Parent ' /category
|
|
If Elements(Main.Element.Parent) = "category" Then
|
|
GetCategories("")
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Main.Element.Parent_Id ' /category/{cat_id}
|
|
If Elements(Main.Element.Parent) = "category" Then
|
|
GetCategories(Elements(Main.Element.Parent_Id))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Main.Element.Child ' /category/{cat_id}/product
|
|
If Elements(Main.Element.Parent) = "category" And Elements(Main.Element.Child) = "product" Then
|
|
GetProductsByCategories(Elements(Main.Element.Parent_Id), "")
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Main.Element.Child_Id ' /category/{cat_id}/product/{product_id}
|
|
If Elements(Main.Element.Parent) = "category" And Elements(Main.Element.Child) = "product" Then
|
|
GetProductsByCategories(Elements(Main.Element.Parent_Id), Elements(Main.Element.Child_Id))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End Select
|
|
Case "POST"
|
|
Select Case Elements.Length - 1
|
|
Case Main.Element.Parent ' /category
|
|
If Elements(Main.Element.Parent) = "category" Then
|
|
PostCategory
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Main.Element.Child ' /category/{cat_id}/product
|
|
If Elements(Main.Element.Parent) = "category" And Elements(Main.Element.Child) = "product" Then
|
|
PostProductByCategory(Elements(Main.Element.Parent_Id))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End Select
|
|
Case "PUT"
|
|
Select Case Elements.Length - 1
|
|
Case Main.Element.Parent_Id ' /category/{cat_id}
|
|
If Elements(Main.Element.Parent) = "category" Then
|
|
PutCategoryById(Elements(Main.Element.Parent_Id))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Main.Element.Child_Id ' /category/{cat_id}/product/{product_id}
|
|
If Elements(Main.Element.Parent) = "category" And Elements(Main.Element.Child) = "product" Then
|
|
PutProductByCategoryAndId(Elements(Main.Element.Parent_Id), Elements(Main.Element.Child_Id))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End Select
|
|
Case "DELETE"
|
|
Select Case Elements.Length - 1
|
|
Case Main.Element.Parent_Id ' /category/{cat_id}
|
|
If Elements(Main.Element.Parent) = "category" Then
|
|
DeleteCategoryById(Elements(Main.Element.PARENT_ID))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Main.Element.Child_Id ' /category/{cat_id}/product/{product_id}
|
|
If Elements(Main.Element.Parent) = "category" And Elements(Main.Element.Child) = "product" Then
|
|
DeleteProductsByCategoryAndId(Elements(Main.Element.Parent_Id), Elements(Main.Element.Child_Id))
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Case Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End Select
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub CheckMaxElements As Boolean
|
|
If Elements.Length > Main.Element.Max_Elements Or Elements.Length = 0 Then
|
|
Return False
|
|
End If
|
|
Return True
|
|
End Sub
|
|
|
|
Private Sub CheckAllowedVerb As Boolean
|
|
'Methods: POST, GET, PUT, PATCH, DELETE
|
|
Dim SupportedMethods As List = Array As String("POST", "GET", "PUT", "DELETE")
|
|
If SupportedMethods.IndexOf(Request.Method) = -1 Then
|
|
Return False
|
|
End If
|
|
Return True
|
|
End Sub
|
|
|
|
Sub OpenDB As SQL
|
|
If Main.Conn.DbType.EqualsIgnoreCase("mysql") Then
|
|
pool = Main.OpenConnection(pool)
|
|
Return pool.GetConnection
|
|
End If
|
|
If Main.Conn.DbType.EqualsIgnoreCase("sqlite") Then
|
|
Return Main.OpenSQLiteDB
|
|
End If
|
|
Return Null
|
|
End Sub
|
|
|
|
Sub CloseDB (con As SQL)
|
|
If con <> Null And con.IsInitialized Then con.Close
|
|
If Main.Conn.DbType.EqualsIgnoreCase("mysql") Then
|
|
If pool.IsInitialized Then pool.ClosePool
|
|
End If
|
|
End Sub
|
|
|
|
Sub GetCategories (cat_id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
If cat_id = "" Then
|
|
strSQL = Main.queries.Get("GET_ALL_CATEGORIES")
|
|
Dim res As ResultSet = con.ExecQuery(strSQL)
|
|
Else
|
|
strSQL = Main.queries.Get("GET_CATEGORY_BY_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id))
|
|
End If
|
|
|
|
Dim List1 As List
|
|
List1.Initialize
|
|
Do While res.NextRow
|
|
Dim Map2 As Map
|
|
Map2.Initialize
|
|
For i = 0 To res.ColumnCount - 1
|
|
Map2.Put(res.GetColumnName(i), res.GetString2(i))
|
|
Next
|
|
List1.Add(Map2)
|
|
Loop
|
|
If List1.Size = 0 Then
|
|
Utility.ReturnError("Category Not Found", 404, Response)
|
|
Else
|
|
Utility.ReturnSuccess2(List1, 200, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub GetProductsByCategories (cat_id As String, id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
If id = "" Then
|
|
strSQL = Main.queries.Get("GET_ALL_PRODUCTS_BY_CATEGORY")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id))
|
|
Else
|
|
strSQL = Main.queries.Get("GET_PRODUCT_BY_CATEGORY_AND_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id, id))
|
|
End If
|
|
|
|
Dim List1 As List
|
|
List1.Initialize
|
|
Do While res.NextRow
|
|
Dim Map2 As Map
|
|
Map2.Initialize
|
|
For i = 0 To res.ColumnCount - 1
|
|
If res.GetColumnName(i) = "product_price" Then
|
|
Map2.Put(res.GetColumnName(i), res.GetDouble2(i))
|
|
Else If res.GetColumnName(i) = "category_id" Or res.GetColumnName(i) = "id" Then
|
|
Map2.Put(res.GetColumnName(i), res.GetInt2(i))
|
|
Else
|
|
Map2.Put(res.GetColumnName(i), res.GetString2(i))
|
|
End If
|
|
Next
|
|
List1.Add(Map2)
|
|
Loop
|
|
If List1.Size = 0 Then
|
|
Utility.ReturnError("Product Not Found", 404, Response)
|
|
Else
|
|
Utility.ReturnSuccess2(List1, 200, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub PostCategory
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
Dim data As Map = Utility.RequestData(Request)
|
|
If data.IsInitialized Then
|
|
strSQL = Main.queries.Get("GET_ID_BY_CATEGORY_NAME")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(data.Get("name")))
|
|
If res.NextRow Then
|
|
Utility.ReturnError("Category Already Exist", 409, Response)
|
|
Else
|
|
strSQL = Main.queries.Get("ADD_NEW_CATEGORY")
|
|
con.BeginTransaction
|
|
con.ExecNonQuery2(strSQL, Array As String(data.Get("name")))
|
|
strSQL = Main.queries.Get("GET_LAST_INSERT_ID")
|
|
Dim NewId As Int = con.ExecQuerySingleResult(strSQL)
|
|
strSQL = Main.queries.Get("GET_CATEGORY_BY_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(NewId))
|
|
con.TransactionSuccessful
|
|
Dim List1 As List
|
|
List1.Initialize
|
|
Do While res.NextRow
|
|
Dim Map2 As Map
|
|
Map2.Initialize
|
|
For i = 0 To res.ColumnCount - 1
|
|
Map2.Put(res.GetColumnName(i), res.GetString2(i))
|
|
Next
|
|
List1.Add(Map2)
|
|
Loop
|
|
Utility.ReturnSuccess2(List1, 201, Response)
|
|
'Dim URL As String = $"${Main.ROOT_URL}${Main.ROOT_PATH}category/${NewId}"$
|
|
'Utility.ReturnLocation(URL, 201, Response)
|
|
End If
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub PostProductByCategory (cat_id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
strSQL = Main.queries.Get("GET_CATEGORY_BY_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id))
|
|
If res.NextRow Then
|
|
Dim data As Map = Utility.RequestData(Request)
|
|
If data.IsInitialized Then
|
|
strSQL = Main.queries.Get("ADD_NEW_PRODUCT_BY_CATEGORY")
|
|
con.BeginTransaction
|
|
con.ExecNonQuery2(strSQL, Array As String(cat_id, data.Get("code"), data.Get("name"), data.Get("price")))
|
|
strSQL = Main.queries.Get("GET_LAST_INSERT_ID")
|
|
Dim NewId As Int = con.ExecQuerySingleResult(strSQL)
|
|
strSQL = Main.queries.Get("GET_PRODUCT_BY_CATEGORY_AND_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id, NewId))
|
|
con.TransactionSuccessful
|
|
Dim List1 As List
|
|
List1.Initialize
|
|
Do While res.NextRow
|
|
Dim Map2 As Map
|
|
Map2.Initialize
|
|
For i = 0 To res.ColumnCount - 1
|
|
Map2.Put(res.GetColumnName(i), res.GetString2(i))
|
|
Next
|
|
List1.Add(Map2)
|
|
Loop
|
|
Utility.ReturnSuccess2(List1, 201, Response)
|
|
'Dim URL As String = $"${Main.ROOT_URL}${Main.ROOT_PATH}category/${cat_id}/${NewId}"$
|
|
'Utility.Returnlocation(URL, 201, Response)
|
|
Return
|
|
End If
|
|
Else
|
|
Utility.ReturnError("Category Not Found", 404, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub PutCategoryById (cat_id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
strSQL = Main.queries.Get("GET_CATEGORY_BY_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id))
|
|
If res.NextRow Then
|
|
Dim data As Map = Utility.RequestData(Request)
|
|
If data.IsInitialized Then
|
|
strSQL = Main.queries.Get("EDIT_CATEGORY_BY_ID")
|
|
con.ExecNonQuery2(strSQL, Array As Object(data.Get("name"), cat_id))
|
|
Utility.ReturnSuccess(CreateMap("result": "success"), 200, Response)
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Else
|
|
Utility.ReturnError("Category Not Found", 404, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub PutProductByCategoryAndId (cat_id As String, id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
strSQL = Main.queries.Get("GET_PRODUCT_BY_CATEGORY_AND_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As String(cat_id, id))
|
|
If res.NextRow Then
|
|
Dim data As Map = Utility.RequestData(Request)
|
|
If data.IsInitialized Then
|
|
strSQL = Main.queries.Get("EDIT_PRODUCT_BY_CATEGORY_AND_ID")
|
|
con.ExecNonQuery2(strSQL, Array As Object(cat_id, data.Get("code"), data.Get("name"), data.Get("price"), cat_id, id))
|
|
Utility.ReturnSuccess(CreateMap("result": "success"), 200, Response)
|
|
Else
|
|
Utility.ReturnError("Bad Request", 400, Response)
|
|
End If
|
|
Else
|
|
Utility.ReturnError("Product Not Found", 404, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub DeleteCategoryById (cat_id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
strSQL = Main.queries.Get("GET_CATEGORY_BY_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As Int(cat_id))
|
|
If res.NextRow Then
|
|
strSQL = Main.queries.Get("REMOVE_CATEGORY_BY_ID")
|
|
con.ExecNonQuery2(strSQL, Array As Int(cat_id))
|
|
Utility.ReturnSuccess(CreateMap("result": "success"), 200, Response)
|
|
Else
|
|
Utility.ReturnError("Category Not Found", 404, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub
|
|
|
|
Sub DeleteProductsByCategoryAndId (cat_id As String, id As String)
|
|
Dim con As SQL = OpenDB
|
|
Dim strSQL As String
|
|
Try
|
|
strSQL = Main.queries.Get("GET_PRODUCT_BY_CATEGORY_AND_ID")
|
|
Dim res As ResultSet = con.ExecQuery2(strSQL, Array As Int(cat_id, id))
|
|
If res.NextRow Then
|
|
strSQL = Main.queries.Get("REMOVE_PRODUCT_BY_CATEGORY_AND_ID")
|
|
con.ExecNonQuery2(strSQL, Array As Int(cat_id, id))
|
|
Utility.ReturnSuccess(CreateMap("result": "success"), 200, Response)
|
|
Else
|
|
Utility.ReturnError("Product Not Found", 404, Response)
|
|
End If
|
|
Catch
|
|
LogDebug(LastException)
|
|
Utility.ReturnError("Error Execute Query", 422, Response)
|
|
End Try
|
|
CloseDB(con)
|
|
End Sub |