package cc.blynk.server.application.handlers.main.logic;
import cc.blynk.server.application.handlers.main.auth.AppStateHolder;
import cc.blynk.server.core.model.DashBoard;
import cc.blynk.server.core.model.auth.App;
import cc.blynk.server.core.model.auth.User;
import cc.blynk.server.core.protocol.exceptions.NotAllowedException;
import cc.blynk.server.core.protocol.model.messages.StringMessage;
import cc.blynk.utils.ArrayUtil;
import io.netty.channel.ChannelHandlerContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import static cc.blynk.utils.BlynkByteBufUtil.ok;
/**
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 01.02.16.
*/
public class DeleteAppLogic {
private static final Logger log = LogManager.getLogger(DeleteAppLogic.class);
public static void messageReceived(ChannelHandlerContext ctx, AppStateHolder state, StringMessage message) {
String id = message.body;
final User user = state.user;
int existingAppIndex = user.profile.getAppIndexById(id);
if (existingAppIndex == -1) {
throw new NotAllowedException("App with passed is not exists.");
}
for (int projectId : user.profile.apps[existingAppIndex].projectIds) {
try {
int index = user.profile.getDashIndexOrThrow(projectId);
user.profile.dashBoards = ArrayUtil.remove(user.profile.dashBoards, index, DashBoard.class);
} catch (Exception e) {
log.debug("Can't delete dash {} from app {}.", projectId, id);
}
}
user.profile.apps = ArrayUtil.remove(user.profile.apps, existingAppIndex, App.class);
user.lastModifiedTs = System.currentTimeMillis();
ctx.writeAndFlush(ok(message.id), ctx.voidPromise());
}
}