Browse Source

fix: station autorequest limit can't be higher than station request limit

Kristian Vos 2 years ago
parent
commit
f292ac1622

+ 5 - 0
backend/logic/actions/stations.js

@@ -1395,6 +1395,11 @@ export default {
 						.catch(next);
 				},
 
+				async () => {
+					if (newStation.requests.autorequestLimit > newStation.requests.limit)
+						throw new Error("The autorequest limit cannot be higher than the request limit.");
+				},
+
 				next => {
 					stationModel.findOne({ _id: stationId }, next);
 				},

+ 10 - 0
backend/logic/db/index.js

@@ -222,6 +222,16 @@ class _DBModule extends CoreClass {
 						message: "User already has 25 stations."
 					});
 
+					this.schemas.station
+						.path("requests.autorequestLimit")
+						.validate(function validateRequestsAutorequestLimit(autorequestLimit) {
+							const { limit } = this.get("requests");
+
+							if (autorequestLimit > limit) return false;
+
+							return true;
+						}, "Autorequest limit cannot be higher than the request limit.");
+
 					// Song
 					this.schemas.song.path("mediaSource").validate(mediaSource => {
 						if (mediaSource.startsWith("youtube:")) return true;

+ 9 - 3
frontend/src/components/modals/ManageStation/Settings.vue

@@ -65,7 +65,14 @@ const { inputs, save, setOriginalValue } = useForm(
 		requestsAccess: station.value.requests.access,
 		requestsLimit: station.value.requests.limit,
 		requestsAllowAutorequest: station.value.requests.allowAutorequest,
-		requestsAutorequestLimit: station.value.requests.autorequestLimit,
+		requestsAutorequestLimit: {
+			value: station.value.requests.autorequestLimit,
+			validate: value => {
+				if (value > station.value.requests.limit)
+					return "The autorequest limit cannot be higher than the request limit.";
+				return true;
+			}
+		},
 		requestsAutorequestDisallowRecentlyPlayedEnabled:
 			station.value.requests.autorequestDisallowRecentlyPlayedEnabled,
 		requestsAutorequestDisallowRecentlyPlayedNumber:
@@ -109,7 +116,6 @@ const { inputs, save, setOriginalValue } = useForm(
 				station.value._id,
 				updatedStation,
 				res => {
-					new Toast(res.message);
 					if (res.status === "success") {
 						editStation(updatedStation);
 						resolve();
@@ -310,7 +316,7 @@ watch(station, value => {
 							class="input"
 							type="number"
 							min="1"
-							max="50"
+							:max="Math.min(50, inputs['requestsLimit'].value)"
 							v-model="inputs['requestsAutorequestLimit'].value"
 						/>
 					</div>