public async Task Export(string path, List <CtfChallangeModel> ctfChallanges)
        {
            if (!Directory.Exists(path))
            {
                try
                {
                    Directory.CreateDirectory(path);
                }
                catch (Exception ex)
                {
                    _logger.Error($"Failed to create folder for ctf. {ex.Message}");
                    return;
                }
            }

            string exportFile = Path.Combine(path, $"{Guid.NewGuid()}.zip");

            using FileStream fileStream = new FileStream(exportFile, FileMode.CreateNew);
            using ZipArchive zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Create, false);

            CTFdBaseModel <CTFdAlembicVersionModel> alembicVersion = GetAlembicVersion();

            await WriteZipDbEntry(zipArchive, ALEMBIC_VERSION_ENTRY_NAME, alembicVersion);

            CTFdBaseModel <CTFdChallengeModel> challanges = GetChallanges(ctfChallanges);

            await WriteZipDbEntry(zipArchive, CHALLENGES_ENTRY_NAME, challanges);

            CTFdBaseModel <CTFdFlagModel> flags = GetFlags(ctfChallanges);

            await WriteZipDbEntry(zipArchive, FLAGS_ENTRY_NAME, flags);
        }
        private static async Task WriteZipDbEntry <T>(ZipArchive zipArchive, string entryName, CTFdBaseModel <T> model)
        {
            JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new SnakeCaseNamingStrategy(),
                },
                DateTimeZoneHandling = DateTimeZoneHandling.Utc,
            };

            using Stream zipStream = zipArchive.CreateEntry(entryName, CompressionLevel.Fastest).Open();

            string json = JsonConvert.SerializeObject(model, jsonSerializerSettings);

            byte[] data = Encoding.UTF8.GetBytes(json);

            await zipStream.WriteAsync(data, 0, data.Length);
        }