Пример #1
0
        /// <summary>
        /// Gets or creates a set of server-specific roleplaying settings for the given server.
        /// </summary>
        /// <param name="server">The server.</param>
        /// <returns>A retrieval result which may or may not have succeeded.</returns>
        public async Task <RetrieveEntityResult <ServerRoleplaySettings> > GetOrCreateServerRoleplaySettingsAsync
        (
            Server server
        )
        {
            var settings = await _database.ServerSettings.ServersideQueryAsync
                           (
                q => q
                .Where(s => s.Server == server)
                .SingleOrDefaultAsync()
                           );

            if (!(settings is null))
            {
                return(settings);
            }

            var newSettings = _database.CreateProxy <ServerRoleplaySettings>(server);

            _database.ServerSettings.Update(newSettings);

            await _database.SaveChangesAsync();

            return(newSettings);
        }
    /// <summary>
    /// Gets or creates a set of server-specific roleplaying settings for the given server.
    /// </summary>
    /// <param name="serverID">The ID of the server.</param>
    /// <returns>A retrieval result which may or may not have succeeded.</returns>
    public async Task <Result <ServerRoleplaySettings> > GetOrCreateServerRoleplaySettingsAsync(Snowflake serverID)
    {
        var getServer = await _servers.GetOrRegisterServerAsync(serverID);

        if (!getServer.IsSuccess)
        {
            return(Result <ServerRoleplaySettings> .FromError(getServer));
        }

        var server = getServer.Entity;

        var settings = await _database.ServerSettings.ServersideQueryAsync
                       (
            q => q
            .Where(s => s.Server == server)
            .SingleOrDefaultAsync()
                       );

        if (settings is not null)
        {
            return(settings);
        }

        var newSettings = _database.CreateProxy <ServerRoleplaySettings>(server);

        _database.ServerSettings.Update(newSettings);

        await _database.SaveChangesAsync();

        return(newSettings);
    }
Пример #3
0
    /// <summary>
    /// Creates a roleplay with the given parameters.
    /// </summary>
    /// <param name="owner">The user that owns the roleplay.</param>
    /// <param name="server">The server that the roleplay is associated with.</param>
    /// <param name="roleplayName">The name of the roleplay.</param>
    /// <param name="roleplaySummary">The summary of the roleplay.</param>
    /// <param name="isNSFW">Whether or not the roleplay is NSFW.</param>
    /// <param name="isPublic">Whether or not the roleplay is public.</param>
    /// <param name="ct">The cancellation token in use.</param>
    /// <returns>A creation result which may or may not have been successful.</returns>
    public async Task <Result <Roleplay> > CreateRoleplayAsync
    (
        User owner,
        Server server,
        string roleplayName,
        string roleplaySummary,
        bool isNSFW,
        bool isPublic,
        CancellationToken ct = default
    )
    {
        owner  = _database.NormalizeReference(owner);
        server = _database.NormalizeReference(server);

        // Use a dummy name, since we'll be setting it using the service.
        var roleplay = _database.CreateProxy <Roleplay>(server, owner, string.Empty, string.Empty);

        _database.Roleplays.Update(roleplay);

        var ownerParticipant = _database.CreateProxy <RoleplayParticipant>(roleplay, owner);

        _database.Update(ownerParticipant);

        ownerParticipant.Status = ParticipantStatus.Joined;
        roleplay.ParticipatingUsers.Add(ownerParticipant);

        var setNameResult = await SetRoleplayNameAsync(roleplay, roleplayName, ct);

        if (!setNameResult.IsSuccess)
        {
            return(Result <Roleplay> .FromError(setNameResult));
        }

        var setSummaryResult = await SetRoleplaySummaryAsync(roleplay, roleplaySummary, ct);

        if (!setSummaryResult.IsSuccess)
        {
            return(Result <Roleplay> .FromError(setSummaryResult));
        }

        roleplay.IsNSFW   = isNSFW;
        roleplay.IsPublic = isPublic;

        await _database.SaveChangesAsync(ct);

        return(roleplay);
    }
Пример #4
0
        /// <summary>
        /// Gets or creates a set of server-specific roleplaying settings for the given server.
        /// </summary>
        /// <param name="server">The server.</param>
        /// <returns>A retrieval result which may or may not have succeeded.</returns>
        public async Task <RetrieveEntityResult <ServerRoleplaySettings> > GetOrCreateServerRoleplaySettingsAsync
        (
            Server server
        )
        {
            var existingSettings = await _database.ServerSettings.AsQueryable().FirstOrDefaultAsync
                                   (
                s => s.Server == server
                                   );

            if (!(existingSettings is null))
            {
                return(RetrieveEntityResult <ServerRoleplaySettings> .FromSuccess(existingSettings));
            }

            var newSettings = _database.CreateProxy <ServerRoleplaySettings>(server);

            _database.ServerSettings.Update(newSettings);
            await _database.SaveChangesAsync();

            return(newSettings);
        }