Skip to content
This repository has been archived by the owner on Aug 9, 2023. It is now read-only.

Database

Robin Möller edited this page Nov 8, 2020 · 3 revisions

Synapse Database

Synapse embeds a small document relational single-file database called LiteDB for you as a developer to access and use in your plugins. You can open and view your database using LiteDB.Studio. It doesn't require any setup up to since the framework uses this database for it's internal PlayerRepository, although you can disable the database in the Synapse Configuration

Create a Database Entity

LiteDB uses POCOs as Entities. You have to implement the IDatabaseEntity Interface in order for your entity to be compatible with our API. An example entity could look like this:

public class PlayerDbo : IDatabaseEntity
{
    //Required
    public int Id { get; set; } 

    //Optional
    public string Name { get; set; }
        
    //Optional
    public Dictionary<string,string> Data { get; set; }
    
    //Makes the codestyle more readable for other devs
    public int GetId() => Id;
}

As you see, you just have to include an Id-Int-Field and every other field will be managed by your plugin.

Creating a Repository

After you have created you POCO you'd have to create a Repository, which is just a class extending the parameterized class Repository, for your entity like that:

public class PlayerRepository : Repository<PlayerDbo>
{
    //Example additional query method
    public PlayerDbo FindByName(string name)
    {
        return Get(LiteDB.Query.EQ("Name", name));
    }
}

As you see, you make custom query methods and not only use the ones already provided by the repository class. Here is a quick example showing how to use already existing methods:

void example() 
{
    //Use of the Query() method
    var List = Repository.Query(queryable => queryable
        .Where("Name", "Test")
        .ToList()
    );

    //Insert a new entity
    var player = Repository.Insert(new PlayerDbo()
         {
             Name = "Hanz",
             Data = {{"Key1", "Value1"},{"OtherKey","OtherValue"}}
         }
    );

    //Updates a entity
    player.Name = "Gunter";
    Repository.save(player);

    //ID will be injected after calling Insert()
    SynapseController.Server.Logger.Info(player.GetId());

    //Deletes the entity
    Repository.Delete(Player);
}

Object Mapping / Type Conversion

LiteDB will map all common C#-DataTypes to the corresponding type in BSON. It comes with a few standard converters, where objects will be further serialized and deserialized:

  • Int16, UInt16, Byte, SByte: Int32
  • UInt32, UInt64: Int64
  • Single: Double
  • Char, Enum: String
  • IList<T>: Array
  • T[]: Array
  • IDictionary<K,T>: Document
  • Any other .NET type: Document
Clone this wiki locally