1
|
|
package edu.ucsb.cs156.happiercows.controllers; |
2
|
|
|
3
|
|
import com.fasterxml.jackson.core.JsonProcessingException; |
4
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
5
|
|
|
6
|
|
import org.springframework.beans.factory.annotation.Autowired; |
7
|
|
|
8
|
|
import org.springframework.security.access.prepost.PreAuthorize; |
9
|
|
import org.springframework.web.bind.annotation.GetMapping; |
10
|
|
import org.springframework.web.bind.annotation.RequestMapping; |
11
|
|
import org.springframework.web.bind.annotation.RequestParam; |
12
|
|
import org.springframework.web.bind.annotation.RestController; |
13
|
|
|
14
|
|
import edu.ucsb.cs156.happiercows.repositories.UserCommonsRepository; |
15
|
|
import edu.ucsb.cs156.happiercows.repositories.CommonsRepository; |
16
|
|
import edu.ucsb.cs156.happiercows.entities.User; |
17
|
|
import edu.ucsb.cs156.happiercows.entities.UserCommons; |
18
|
|
import edu.ucsb.cs156.happiercows.entities.Commons; |
19
|
|
import edu.ucsb.cs156.happiercows.errors.EntityNotFoundException; |
20
|
|
import edu.ucsb.cs156.happiercows.errors.NoCowsException; |
21
|
|
import edu.ucsb.cs156.happiercows.errors.NotEnoughMoneyException; |
22
|
|
|
23
|
|
import io.swagger.v3.oas.annotations.tags.Tag; |
24
|
|
import io.swagger.v3.oas.annotations.Operation; |
25
|
|
import io.swagger.v3.oas.annotations.Parameter; |
26
|
|
|
27
|
|
import org.springframework.http.ResponseEntity; |
28
|
|
import javax.validation.Valid; |
29
|
|
import org.springframework.web.bind.annotation.RequestBody; |
30
|
|
import org.springframework.web.bind.annotation.PutMapping; |
31
|
|
import org.springframework.web.bind.annotation.PostMapping; |
32
|
|
import org.springframework.web.bind.annotation.RequestBody; |
33
|
|
|
34
|
|
@Tag(name = "User Commons") |
35
|
|
@RequestMapping("/api/usercommons") |
36
|
|
@RestController |
37
|
|
public class UserCommonsController extends ApiController { |
38
|
|
|
39
|
|
@Autowired |
40
|
|
private UserCommonsRepository userCommonsRepository; |
41
|
|
|
42
|
|
@Autowired |
43
|
|
private CommonsRepository commonsRepository; |
44
|
|
|
45
|
|
@Autowired |
46
|
|
ObjectMapper mapper; |
47
|
|
|
48
|
|
@Operation(summary = "Get a specific user commons (admin only)") |
49
|
|
@PreAuthorize("hasRole('ROLE_ADMIN')") |
50
|
|
@GetMapping("") |
51
|
|
public UserCommons getUserCommonsById( |
52
|
|
@Parameter(name="userId") @RequestParam Long userId, |
53
|
|
@Parameter(name="commonsId") @RequestParam Long commonsId) throws JsonProcessingException { |
54
|
|
|
55
|
|
UserCommons userCommons = userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId) |
56
|
|
.orElseThrow( |
57
|
1
1. lambda$getUserCommonsById$0 : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$getUserCommonsById$0 → KILLED
|
() -> new EntityNotFoundException(UserCommons.class, "commonsId", commonsId, "userId", userId)); |
58
|
1
1. getUserCommonsById : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::getUserCommonsById → KILLED
|
return userCommons; |
59
|
|
} |
60
|
|
|
61
|
|
@Operation(summary = "Get a user commons for current user") |
62
|
|
@PreAuthorize("hasRole('ROLE_USER')") |
63
|
|
@GetMapping("/forcurrentuser") |
64
|
|
public UserCommons getUserCommonsById( |
65
|
|
@Parameter(name="commonsId") @RequestParam Long commonsId) throws JsonProcessingException { |
66
|
|
|
67
|
|
User u = getCurrentUser().getUser(); |
68
|
|
Long userId = u.getId(); |
69
|
|
UserCommons userCommons = userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId) |
70
|
|
.orElseThrow( |
71
|
1
1. lambda$getUserCommonsById$1 : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$getUserCommonsById$1 → KILLED
|
() -> new EntityNotFoundException(UserCommons.class, "commonsId", commonsId, "userId", userId)); |
72
|
1
1. getUserCommonsById : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::getUserCommonsById → KILLED
|
return userCommons; |
73
|
|
} |
74
|
|
|
75
|
|
@Operation(summary = "Buy a cow, totalWealth updated") |
76
|
|
@PreAuthorize("hasRole('ROLE_USER')") |
77
|
|
@PutMapping("/buy") |
78
|
|
public ResponseEntity<String> putUserCommonsByIdBuy( |
79
|
|
@Parameter(name="commonsId") @RequestParam Long commonsId) throws NotEnoughMoneyException, JsonProcessingException{ |
80
|
|
|
81
|
|
User u = getCurrentUser().getUser(); |
82
|
|
Long userId = u.getId(); |
83
|
|
|
84
|
|
Commons commons = commonsRepository.findById(commonsId).orElseThrow( |
85
|
1
1. lambda$putUserCommonsByIdBuy$2 : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdBuy$2 → KILLED
|
()->new EntityNotFoundException(Commons.class, commonsId)); |
86
|
|
UserCommons userCommons = userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId) |
87
|
|
.orElseThrow( |
88
|
1
1. lambda$putUserCommonsByIdBuy$3 : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdBuy$3 → KILLED
|
() -> new EntityNotFoundException(UserCommons.class, "commonsId", commonsId, "userId", userId)); |
89
|
|
|
90
|
2
1. putUserCommonsByIdBuy : changed conditional boundary → KILLED
2. putUserCommonsByIdBuy : negated conditional → KILLED
|
if(userCommons.getTotalWealth() >= commons.getCowPrice() ){ |
91
|
2
1. putUserCommonsByIdBuy : Replaced double subtraction with addition → KILLED
2. putUserCommonsByIdBuy : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setTotalWealth → KILLED
|
userCommons.setTotalWealth(userCommons.getTotalWealth() - commons.getCowPrice()); |
92
|
2
1. putUserCommonsByIdBuy : Replaced integer addition with subtraction → KILLED
2. putUserCommonsByIdBuy : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setNumOfCows → KILLED
|
userCommons.setNumOfCows(userCommons.getNumOfCows() + 1); |
93
|
2
1. putUserCommonsByIdBuy : Replaced integer addition with subtraction → KILLED
2. putUserCommonsByIdBuy : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setCowsBought → KILLED
|
userCommons.setCowsBought(userCommons.getCowsBought() + 1); |
94
|
|
} |
95
|
|
else{ |
96
|
|
throw new NotEnoughMoneyException("You need more money!"); |
97
|
|
} |
98
|
|
userCommonsRepository.save(userCommons); |
99
|
|
|
100
|
|
String body = mapper.writeValueAsString(userCommons); |
101
|
1
1. putUserCommonsByIdBuy : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::putUserCommonsByIdBuy → KILLED
|
return ResponseEntity.ok().body(body); |
102
|
|
} |
103
|
|
|
104
|
|
@Operation(summary = "Sell a cow, totalWealth updated") |
105
|
|
@PreAuthorize("hasRole('ROLE_USER')") |
106
|
|
@PutMapping("/sell") |
107
|
|
public ResponseEntity<String> putUserCommonsByIdSell( |
108
|
|
@Parameter(name="commonsId") @RequestParam Long commonsId) throws NoCowsException, JsonProcessingException { |
109
|
|
User u = getCurrentUser().getUser(); |
110
|
|
Long userId = u.getId(); |
111
|
|
|
112
|
|
Commons commons = commonsRepository.findById(commonsId).orElseThrow( |
113
|
1
1. lambda$putUserCommonsByIdSell$4 : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdSell$4 → KILLED
|
()->new EntityNotFoundException(Commons.class, commonsId)); |
114
|
|
UserCommons userCommons = userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId) |
115
|
|
.orElseThrow( |
116
|
1
1. lambda$putUserCommonsByIdSell$5 : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdSell$5 → KILLED
|
() -> new EntityNotFoundException(UserCommons.class, "commonsId", commonsId, "userId", userId)); |
117
|
|
|
118
|
|
|
119
|
2
1. putUserCommonsByIdSell : changed conditional boundary → KILLED
2. putUserCommonsByIdSell : negated conditional → KILLED
|
if(userCommons.getNumOfCows() >= 1 ){ |
120
|
4
1. putUserCommonsByIdSell : Replaced double multiplication with division → KILLED
2. putUserCommonsByIdSell : Replaced double division with multiplication → KILLED
3. putUserCommonsByIdSell : Replaced double addition with subtraction → KILLED
4. putUserCommonsByIdSell : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setTotalWealth → KILLED
|
userCommons.setTotalWealth(userCommons.getTotalWealth() + (commons.getCowPrice() * userCommons.getCowHealth() / 100)); |
121
|
2
1. putUserCommonsByIdSell : Replaced integer subtraction with addition → KILLED
2. putUserCommonsByIdSell : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setNumOfCows → KILLED
|
userCommons.setNumOfCows(userCommons.getNumOfCows() - 1); |
122
|
2
1. putUserCommonsByIdSell : Replaced integer addition with subtraction → KILLED
2. putUserCommonsByIdSell : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setCowsSold → KILLED
|
userCommons.setCowsSold(userCommons.getCowsSold() + 1); |
123
|
|
} |
124
|
|
else{ |
125
|
|
throw new NoCowsException("You have no cows to sell!"); |
126
|
|
} |
127
|
|
userCommonsRepository.save(userCommons); |
128
|
|
|
129
|
|
String body = mapper.writeValueAsString(userCommons); |
130
|
1
1. putUserCommonsByIdSell : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::putUserCommonsByIdSell → KILLED
|
return ResponseEntity.ok().body(body); |
131
|
|
} |
132
|
|
|
133
|
|
|
134
|
|
|
135
|
|
@Operation(summary = "Get all user commons for a specific commons") |
136
|
|
@GetMapping("/commons/all") |
137
|
|
public ResponseEntity<String> getUsersCommonsByCommonsId( |
138
|
|
@Parameter(name="commonsId") @RequestParam Long commonsId) throws JsonProcessingException { |
139
|
|
Iterable<UserCommons> uc = userCommonsRepository.findByCommonsId(commonsId); |
140
|
|
|
141
|
|
|
142
|
|
String body = mapper.writeValueAsString(uc); |
143
|
1
1. getUsersCommonsByCommonsId : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::getUsersCommonsByCommonsId → KILLED
|
return ResponseEntity.ok().body(body); |
144
|
|
} |
145
|
|
|
146
|
|
} |
| | Mutations |
57 |
|
1.1 Location : lambda$getUserCommonsById$0 Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_getUserCommonsById_nonexists_admin()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$getUserCommonsById$0 → KILLED
|
58 |
|
1.1 Location : getUserCommonsById Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_getUserCommonsById_exists_admin()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::getUserCommonsById → KILLED
|
71 |
|
1.1 Location : lambda$getUserCommonsById$1 Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_getUserCommonsById_nonexists()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$getUserCommonsById$1 → KILLED
|
72 |
|
1.1 Location : getUserCommonsById Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_getUserCommonsById_exists()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::getUserCommonsById → KILLED
|
85 |
|
1.1 Location : lambda$putUserCommonsByIdBuy$2 Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_buyCow_commons_does_not_exist()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdBuy$2 → KILLED
|
88 |
|
1.1 Location : lambda$putUserCommonsByIdBuy$3 Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_buyCow_for_user_not_in_commons()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdBuy$3 → KILLED
|
90 |
|
1.1 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists_user_has_exact_amount_needed()] changed conditional boundary → KILLED 2.2 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists_not_enough_money()] negated conditional → KILLED
|
91 |
|
1.1 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] Replaced double subtraction with addition → KILLED 2.2 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setTotalWealth → KILLED
|
92 |
|
1.1 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] Replaced integer addition with subtraction → KILLED 2.2 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setNumOfCows → KILLED
|
93 |
|
1.1 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] Replaced integer addition with subtraction → KILLED 2.2 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setCowsBought → KILLED
|
101 |
|
1.1 Location : putUserCommonsByIdBuy Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_BuyCow_commons_exists()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::putUserCommonsByIdBuy → KILLED
|
113 |
|
1.1 Location : lambda$putUserCommonsByIdSell$4 Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_sellCow_commons_does_not_exist()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdSell$4 → KILLED
|
116 |
|
1.1 Location : lambda$putUserCommonsByIdSell$5 Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_sellCow_for_user_not_in_commons()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::lambda$putUserCommonsByIdSell$5 → KILLED
|
119 |
|
1.1 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] changed conditional boundary → KILLED 2.2 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists_no_cow_to_sell()] negated conditional → KILLED
|
120 |
|
1.1 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] Replaced double multiplication with division → KILLED 2.2 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] Replaced double division with multiplication → KILLED 3.3 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] Replaced double addition with subtraction → KILLED 4.4 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setTotalWealth → KILLED
|
121 |
|
1.1 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] Replaced integer subtraction with addition → KILLED 2.2 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setNumOfCows → KILLED
|
122 |
|
1.1 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] Replaced integer addition with subtraction → KILLED 2.2 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setCowsSold → KILLED
|
130 |
|
1.1 Location : putUserCommonsByIdSell Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_SellCow_commons_exists()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::putUserCommonsByIdSell → KILLED
|
143 |
|
1.1 Location : getUsersCommonsByCommonsId Killed by : edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.UserCommonsControllerTests]/[method:test_Admin_getAllUserCommonsById_exists()] replaced return value with null for edu/ucsb/cs156/happiercows/controllers/UserCommonsController::getUsersCommonsByCommonsId → KILLED
|