public async Task <IActionResult> AddNewEmojiWithSkin(AddEmojiWithSkinInputModel model)
        {
            if (this.ModelState.IsValid)
            {
                string result = await this.addEmojiWithSkinService.AddEmojiWithSkin(model);

                this.TempData["Success"] = result;
                return(this.RedirectToAction("Index", "AddEmojiWithSkin"));
            }
            else
            {
                this.TempData["Error"] = ErrorMessages.InvalidInputModel;
                return(this.RedirectToAction("Index", "AddEmojiWithSkin", model));
            }
        }
예제 #2
0
        public async Task <string> AddEmojiWithSkin(AddEmojiWithSkinInputModel model)
        {
            var targetEmoji = await this.db.Emojis.FirstOrDefaultAsync(x => x.Name.ToUpper() == model.Name.ToUpper() && x.EmojiType == model.EmojiType);

            var addedSkins = 0;

            if (targetEmoji == null)
            {
                var lastEmojiNumber = await this.db.Emojis
                                      .Where(x => x.EmojiType == model.EmojiType)
                                      .Select(x => x.Position)
                                      .OrderByDescending(x => x)
                                      .FirstOrDefaultAsync();

                targetEmoji = new Emoji
                {
                    Name      = model.Name,
                    EmojiType = model.EmojiType,
                    Position  = lastEmojiNumber + 1,
                };

                var imgeUrl = await ApplicationCloudinary.UploadImage(
                    this.cloudinary,
                    model.Image,
                    string.Format(GlobalConstants.EmojiName, targetEmoji.Id),
                    GlobalConstants.EmojisFolder);

                targetEmoji.Url = imgeUrl;

                var lastEmojiSkinNumber = await this.db.EmojiSkins
                                          .Where(x => x.EmojiId == targetEmoji.Id)
                                          .Select(x => x.Position)
                                          .OrderByDescending(x => x)
                                          .FirstOrDefaultAsync();

                foreach (var skinFile in model.ImageSkins)
                {
                    var fileName  = Path.GetFileNameWithoutExtension(skinFile.FileName);
                    var emojiSkin = new EmojiSkin
                    {
                        EmojiId  = targetEmoji.Id,
                        Name     = fileName,
                        Position = lastEmojiSkinNumber + 1,
                    };

                    var skinUrl = await ApplicationCloudinary.UploadImage(
                        this.cloudinary,
                        skinFile,
                        string.Format(GlobalConstants.EmojiSkin, emojiSkin.Id),
                        GlobalConstants.EmojisFolder);

                    emojiSkin.Url = skinUrl;

                    this.db.Emojis.Add(targetEmoji);
                    this.db.EmojiSkins.Add(emojiSkin);
                    lastEmojiSkinNumber++;
                    addedSkins++;
                }

                await this.db.SaveChangesAsync();

                return(string.Format(
                           SuccessMessages.SuccessfullyAddedEmojiWithSkins,
                           model.Name.ToUpper(),
                           addedSkins));
            }
            else
            {
                var targetSkins = this.db.EmojiSkins.Where(x => x.EmojiId == targetEmoji.Id).ToList();

                var lastEmojiSkinNumber = await this.db.EmojiSkins
                                          .Where(x => x.EmojiId == targetEmoji.Id)
                                          .Select(x => x.Position)
                                          .OrderByDescending(x => x)
                                          .FirstOrDefaultAsync();

                foreach (var skinFile in model.ImageSkins)
                {
                    var fileName = Path.GetFileNameWithoutExtension(skinFile.FileName);
                    if (!targetSkins.Any(x => x.Name.ToUpper() == fileName.ToUpper()))
                    {
                        var emojiSkin = new EmojiSkin
                        {
                            EmojiId  = targetEmoji.Id,
                            Name     = fileName,
                            Position = lastEmojiSkinNumber + 1,
                        };

                        var skinUrl = await ApplicationCloudinary.UploadImage(
                            this.cloudinary,
                            skinFile,
                            string.Format(GlobalConstants.EmojiSkin, emojiSkin.Id),
                            GlobalConstants.EmojisFolder);

                        emojiSkin.Url = skinUrl;

                        targetSkins.Add(emojiSkin);
                        lastEmojiSkinNumber++;
                        addedSkins++;
                        this.db.EmojiSkins.Add(emojiSkin);
                    }
                }

                await this.db.SaveChangesAsync();

                return(string.Format(
                           SuccessMessages.SuccessfullyAddedEmojiWithSkins,
                           model.Name.ToUpper(),
                           addedSkins));
            }
        }