Skip to content

Commit

Permalink
fix update,create voucher, fix validate signup
Browse files Browse the repository at this point in the history
  • Loading branch information
jackytank committed Dec 17, 2022
1 parent 49688a5 commit a7bb31a
Show file tree
Hide file tree
Showing 21 changed files with 110 additions and 67 deletions.
1 change: 0 additions & 1 deletion Procfile

This file was deleted.

3 changes: 1 addition & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<version>2.7.6</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.edu</groupId>
Expand All @@ -17,7 +17,6 @@
<java.version>17</java.version>
</properties>
<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.edu.graduationproject.controller.rest;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -24,8 +23,8 @@

import com.edu.graduationproject.entity.User;
import com.edu.graduationproject.entity.UserRole;
import com.edu.graduationproject.exception.BadRequestException;
import com.edu.graduationproject.exception.ResourceNotFoundException;
import com.edu.graduationproject.model.EAuthProvider;
import com.edu.graduationproject.service.UserRoleService;
import com.edu.graduationproject.service.UserService;
import com.fasterxml.jackson.core.JsonProcessingException;
Expand All @@ -49,7 +48,7 @@ public ResponseEntity<List<User>> getAccounts(@RequestParam("admin") Optional<Bo
@GetMapping("/rest/users/principal")
public ResponseEntity<Object> getAuthenticatedUser(Authentication authentication) {
Map<String, Object> map = new HashMap<String, Object>();
Collection<? extends GrantedAuthority> userRoles = authentication.getAuthorities();
Collection<? extends GrantedAuthority> userRoles = authentication.getAuthorities();
try {
Optional<User> loggedinUser = userService.findByUsername(authentication.getName());
map.put("id", loggedinUser.get().getId());
Expand Down Expand Up @@ -91,12 +90,16 @@ public ResponseEntity<User> create(@RequestBody User user) {
public ResponseEntity<User> update(@PathVariable("idOrUsername") Optional<Object> idOrUsername,
@RequestBody User user) throws JsonProcessingException {
try {
Optional<User> existingUser = userService.findByUsername((String) idOrUsername.get());
if (!existingUser.isPresent()) {
existingUser = userService.findById(Integer.valueOf((String) idOrUsername.get()));
Optional<User> userByUsername = userService.findByUsername((String) idOrUsername.get());
Optional<User> userById = userService.findById(Integer.valueOf((String) idOrUsername.get()));
if (userByUsername.isPresent() || userById.isPresent()) {
if (user.getIsDeleted() == null) {
user.setIsDeleted(false);
}
User savedUser = userService.update(user);
return ResponseEntity.ok(savedUser);
}
User savedUser = userService.update(user);
return ResponseEntity.ok(savedUser);
return ResponseEntity.notFound().build();
} catch (NoSuchElementException e) {
return ResponseEntity.notFound().build();
}
Expand All @@ -105,14 +108,18 @@ public ResponseEntity<User> update(@PathVariable("idOrUsername") Optional<Object
// update admin
@PutMapping("/rest/admin/{idOrUsername}")
public ResponseEntity<User> adminUpdate(@PathVariable("idOrUsername") Optional<Object> idOrUsername,
@RequestBody User user) throws JsonProcessingException {
@RequestBody User user, Authentication auth) throws JsonProcessingException {
try {
Optional<User> existingUser = userService.findByUsername((String) idOrUsername.get());
if (!existingUser.isPresent()) {
existingUser = userService.findById(Integer.valueOf((String) idOrUsername.get()));
Optional<User> userByUsername = userService.findByUsername((String) idOrUsername.get());
Optional<User> userById = userService.findById(Integer.valueOf((String) idOrUsername.get()));
if (userByUsername.isPresent() || userById.isPresent()) {
if (user.getIsDeleted() == null) {
user.setIsDeleted(false);
}
User savedUser = userService.update(user);
return ResponseEntity.ok(savedUser);
}
User savedUser = userService.update(user);
return ResponseEntity.ok(savedUser);
return ResponseEntity.notFound().build();
} catch (NoSuchElementException e) {
return ResponseEntity.notFound().build();
}
Expand All @@ -125,6 +132,9 @@ public void delete(@PathVariable("username") Optional<String> username, Authenti
Optional<User> reqUser = userService.findByUsername(auth.getName());
Optional<User> findUser = userService.findByUsername(username.get());
if (findUser.isPresent() && reqUser.isPresent()) {
if (auth.getName().equals(username.get())) {
throw new BadRequestException("You can't delete yourself");
}
List<UserRole> reqRoles = userRoleService.findRolesOfAdministrators();
}
userService.deleteByUsername(username.get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,12 @@ public ResponseEntity<Voucher> findByCode(@PathVariable String code) {

@PostMapping("/rest/vouchers")
public ResponseEntity<Voucher> createVoucher(@RequestBody Voucher voucher) {
Optional<Voucher> v = voucherService.findByCodeIsNotDeleted(voucher.getCode());
if (v.isPresent()) {
Optional<Voucher> findVoucher = voucherService.findByCodeIsNotDeleted(voucher.getCode());
if (findVoucher.isPresent()) {
return ResponseEntity.status(HttpStatus.FOUND).build();
} else {
Voucher newVoucher = voucherService.create(voucher);
return ResponseEntity.ok(newVoucher);
}
Voucher newVoucher = voucherService.create(voucher);
return ResponseEntity.ok(newVoucher);
}

@PutMapping("/rest/vouchers/{id}")
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/edu/graduationproject/entity/Voucher.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public class Voucher implements Serializable {
private Boolean isUsed;

@JsonIgnore
@OneToMany(mappedBy = "voucher", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Order> orders = new HashSet<>();
@OneToMany(mappedBy = "voucher")
private List<Order> orders;

}
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,7 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
cityResponse.getLocation() != null ? cityResponse.getLocation().getLongitude() : 0);
}
}

visitorService.saveVisitorInfo(visitor);

return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.springframework.data.jpa.repository.Query;

import com.edu.graduationproject.entity.Voucher;
import org.springframework.data.jpa.repository.Query;

public interface VoucherRepository extends JpaRepository<Voucher, Integer> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.edu.graduationproject.service.VoucherService;
import com.edu.graduationproject.utils.CommonUtils;
import com.edu.graduationproject.utils.DateUtils;
import com.edu.graduationproject.utils.URLUtils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down Expand Up @@ -60,27 +61,34 @@ public class OrderServiceImpl implements OrderService {
VoucherService voucherService;

@Override
@Transactional(rollbackFor = { Exception.class, Throwable.class })
public Order create(JsonNode orderData) {
ObjectMapper mapper = new ObjectMapper();
Order order = mapper.convertValue(orderData, Order.class);
User user = userService.findByUsername(order.getUser().getUsername()).get();
order.setCreatedAt(new Date());
order.setUser(user);
orderRepo.save(order);
Optional<Voucher> v = voucherService.findById(order.getVoucher().getId());

// is voucher is present then set isUsed to true
if (order.getVoucher().getId() != null) {
Optional<Voucher> optV = voucherService.findById(order.getVoucher().getId());
if (optV.isPresent()) {
Voucher v = optV.get();
v.setIsUsed(true);
voucherService.update(v.getId(), v);
}
}
List<OrderDetails> list = mapper
.convertValue(orderData.get("order_details"), new TypeReference<List<OrderDetails>>() {
})
.stream().peek(o -> o.setOrder(order)).collect(Collectors.toList());

// increment product sold to 1, decrease product stock to 1
// increment product sold, decrease product stock
list.forEach((detail) -> {
Product product = productService.findById(detail.getProduct().getId());
Long oldSold = product.getSold();
Long oldStock = product.getStock();
product.setSold(oldSold + detail.getQuantity());
product.setStock(oldStock - detail.getQuantity());
product.setStock(oldStock < 0 ? 0 : oldStock - detail.getQuantity()); // prevent stock < 0
});
orderDetailRepo.saveAll(list);
return order;
Expand All @@ -93,7 +101,7 @@ public void sendEmailReceipt(JsonNode orderData, HttpServletRequest request) {
// create accessToken
String randomStr = RandomString.make(30);
String abilities = "DOWNLOAD";
String downloadLink = CommonUtils.getSiteURL(request) + "/rest/orders/download-invoice?accessToken="
String downloadLink = URLUtils.getBaseURl(request) + "/rest/orders/download-invoice?accessToken="
+ randomStr + "&orderId=" + order.getId();
accessTokenService.create(new PersonalAccessToken(randomStr, abilities));
System.out.println(downloadLink);
Expand Down Expand Up @@ -184,7 +192,7 @@ public int updateStatus(String orderStatus, Long orderId, List<OrderDetails> ord
Product product = productService.findById(detail.getProduct().getId());
Long oldSold = product.getSold();
Long oldStock = product.getStock();
product.setSold(oldSold - detail.getQuantity());
product.setSold(oldSold < 0 ? 0 : oldSold - detail.getQuantity()); // prevent sold < 0
product.setStock(oldStock + detail.getQuantity());
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ public Optional<Voucher> findByCodeIsNotDeleted(String code) {

@Override
public Voucher create(Voucher voucher) {
if (voucher.getIsUsed() == null) {
voucher.setIsUsed(false);
}
return voucherRepo.save(voucher);
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/static/admin/pages/product/edit.html
Original file line number Diff line number Diff line change
Expand Up @@ -101,5 +101,5 @@
</div>

<!-- Submit button -->
<button ng-disabled="myEditForm.$invalid" ng-click="update()" type="submit" class="btn btn-success btn-block mt-4 mb-4">Cập nhập</button>
<button ng-disabled="myEditForm.$invalid" ng-click="update()" type="submit" class="btn btn-success btn-block mb-4">Cập nhập</button>
</form>
8 changes: 6 additions & 2 deletions src/main/resources/static/admin/pages/product/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<table class="table">
<thead class="table-light">
<tr>
<th><strong>#</strong></th>
<th>ID</th>
<th>Tên</th>
<th>Ảnh</th>
Expand Down Expand Up @@ -35,6 +36,7 @@
</th>
</tr>
<tr ng-repeat="item in pager.items | filter: searchTextProduct">
<td>{{$index + 1}}</td>
<td>{{item.id}}</td>
<td>{{item.name | limitTo: 10}}{{item.name.length > 10 ? '...' : ''}}</td>
<td>{{item.image | limitTo: 10}}{{item.image.length > 10 ? '...' : ''}}</td>
Expand All @@ -50,8 +52,10 @@
<td>{{item.updatedAt | date:'dd-MM-yyyy'}}</td>
<td>{{item.createdAt | date:'dd-MM-yyyy'}}</td>
<td>
<button type="button" class="btn btn-dark" ng-click="edit(item)">Edit</button>
<button type="button" class="btn btn-danger" ng-click="delete(item)">Del</button>
<div class="btn-group">
<button type="button" class="btn btn-outline-dark" ng-click="edit(item)">Edit</button>
<button type="button" class="btn btn-danger" ng-click="delete(item)">Del</button>
</div>
</td>
</tr>
</tbody>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/static/admin/pages/product/new.html
Original file line number Diff line number Diff line change
Expand Up @@ -94,5 +94,5 @@
</div>

<!-- Submit button -->
<button type="button" ng-disabled="myNewForm.$invalid" ng-click="create()" class="btn btn-success btn-block mt-4 mb-4">Tạo mới</button>
<button type="button" ng-disabled="myNewForm.$invalid" ng-click="create()" class="btn btn-success btn-block mb-4">Tạo mới</button>
</form>
2 changes: 1 addition & 1 deletion src/main/resources/static/admin/pages/user/edit.html
Original file line number Diff line number Diff line change
Expand Up @@ -93,5 +93,5 @@
</div>

<!-- Submit button -->
<button ng-disabled="myEditForm.$invalid" ng-click="update()" type="button" class="btn btn-success btn-block mt-4 mb-4">Cập nhật</button>
<button ng-disabled="myEditForm.$invalid" ng-click="update()" type="button" class="btn btn-success btn-block mb-4">Cập nhật</button>
</form>
12 changes: 8 additions & 4 deletions src/main/resources/static/admin/pages/user/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<table class="table">
<thead class="table-light">
<tr>
<th><strong>#</strong></th>
<th>ID</th>
<th>Tên người dùng</th>
<th>Mật khẩu</th>
Expand Down Expand Up @@ -35,11 +36,12 @@
</th>
</tr>
<tr ng-repeat="item in pager.items | filter: searchTextUser">
<td><strong>{{$index + 1}}</strong></td>
<td>{{item.id}}</td>
<td>{{item.username}}</td>
<td>{{item.password | limitTo: 10 }}{{item.password.length > 10 ? '...' : ''}}</td>
<td>{{item.fullname}}</td>
<td>{{item.email}}</td>
<td>{{item.fullname | limitTo: 10 }}{{item.fullname.length > 10 ? '...' : ''}}</td>
<td>{{item.email | limitTo: 10 }}{{item.email.length > 10 ? '...' : ''}}</td>
<td>{{item.phone}}</td>
<td>{{item.address | limitTo: 10 }}{{item.address.length > 10 ? '...' : ''}}</td>
<td>{{item.image_url | limitTo: 10 }}{{item.image_url.length > 10 ? '...' : ''}}</td>
Expand All @@ -50,8 +52,10 @@
<td>{{item.updatedAt | date:'dd-MM-yyyy'}}</td>
<td>{{item.createdAt | date:'dd-MM-yyyy'}}</td>
<td>
<button ng-click="edit(item)" type="button" class="btn btn-dark">Edit</button>
<button ng-click="delete(item)" type="button" class="btn btn-danger">Del</button>
<div class="btn-group">
<button ng-click="edit(item)" type="button" class="btn btn-outline-dark">Edit</button>
<button ng-click="delete(item)" type="button" class="btn btn-danger" ng-disabled="userPrincipal.id === item.id">Del</button>
</div>
</td>
</tr>
</tbody>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/static/admin/pages/user/new.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,5 @@
</div>

<!-- Submit button -->
<button ng-disabled="myNewForm.$invalid" ng-click="create()" type="submit" class="btn btn-success btn-block mt-4 mb-4">Tạo mới</button>
<button ng-disabled="myNewForm.$invalid" ng-click="create()" type="submit" class="btn btn-success btn-block mb-4">Tạo mới</button>
</form>
7 changes: 7 additions & 0 deletions src/main/resources/static/admin/pages/user/user.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ app.controller("user-ctrl", function ($scope, $http) {
$scope.editForm = {};
$scope.roles = [];
$scope.searchTextUser = '';
$scope.userPrincipal = {}

$scope.initialize = function () {
$scope.loading = true;
$scope.userPrincipal = JSON.parse(localStorage.getItem('userPrincipal'));
$http.get("/rest/roles").then(resp => {
new Set(resp.data).forEach(role => {
if (!$scope.roles.includes({ id: role.id })) {
Expand Down Expand Up @@ -132,6 +134,11 @@ app.controller("user-ctrl", function ($scope, $http) {
$scope.delete = function (item) {
let check = confirm(`Bạn có chắn chắc muốn xóa người dùng này không ${item.username}`);
if (check) {
const loggedInUser = JSON.parse(localStorage.getItem('userPrincipal'));
if (item.id === loggedInUser.id || item.username === loggedInUser.username) {
alert('Không thể xóa người dùng đang đăng nhập');
return;
}
$http.delete(`/rest/users/${item.username}`).then(resp => {
let index = $scope.items.findIndex(p => p.username == item.username);
$scope.items.splice(index, 1);
Expand Down
8 changes: 6 additions & 2 deletions src/main/resources/static/admin/pages/voucher/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<th>Code</th>
<th>Description</th>
<th>Giá trị giảm</th>
<th>Đã dùng?</th>
<th>Ngày hiệu lực</th>
<th>Ngày kết thúc</th>
<th>Ngày update</th>
Expand All @@ -32,12 +33,15 @@
<td>{{voucher.code}}</td>
<td>{{voucher.description}}</td>
<td>{{voucher.value}}%</td>
<td>{{voucher.isUsed === true ? 'Có':'Không'}}</td>
<td>{{voucher.startDate | date:'dd-MM-yyyy'}}</td>
<td>{{voucher.endDate | date:'dd-MM-yyyy'}}</td>
<td>{{voucher.updatedAt | date:'dd-MM-yyyy'}}</td>
<td>
<button type="button" class="btn btn-dark" ng-click="edit(voucher)">Edit</button>
<button type="button" class="btn btn-danger" ng-click="delete(voucher)">Del</button>
<div class="btn-group">
<button type="button" class="btn btn-outline-dark" ng-click="edit(voucher)">Edit</button>
<button type="button" class="btn btn-danger" ng-click="delete(voucher)">Del</button>
</div>
</td>
</tr>
</tbody>
Expand Down
Loading

0 comments on commit a7bb31a

Please sign in to comment.