Ivet.Model 1.3.0

dotnet add package Ivet.Model --version 1.3.0                
NuGet\Install-Package Ivet.Model -Version 1.3.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ivet.Model" Version="1.3.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Ivet.Model --version 1.3.0                
#r "nuget: Ivet.Model, 1.3.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Ivet.Model as a Cake Addin
#addin nuget:?package=Ivet.Model&version=1.3.0

// Install Ivet.Model as a Cake Tool
#tool nuget:?package=Ivet.Model&version=1.3.0                

Summary

Ivet is a command line tool created to generate a schema for a janusgraph database and apply this schema. It has been inspired from Doctrine behaviour. The generate command creates a json file containing commands to execute. The file can be manually modified if you find migration is not complete or does not cover all you deserves. To keep trace of all applied migrations, migration names are saved into janusgraph server when upgrade is called. You can check at any moment the list of migrations both applied and not.

[!CAUTION] There is a fourth command test. It is used to populate database either for personnal tests or unit tests. Do not use it in your production environment.

Available commands

  • generate
    • dir* Dlls to analyze
    • output* Directory where to put migration file
    • ip localhost
    • port 8182
  • list Display list of all migrations
    • input* Directory where to find migration files
    • ip localhost
    • port 8182
  • upgrade
    • input* Can be a file or a directory containing migrations to be applied
    • ip localhost
    • port 8182

Docker image

Docker image is available there:

To use Docker image, run the following command replacing MyDir with your local dierctory

docker run -v MyDir:/app/Migrations -e ip=localhost ivet

See upgrade command to add your own parameters.

Dotnet Tool

You can install Ivet as a dotnet tool

dotnet tool install --global Ivet

All versions are available on https://www.nuget.org/packages/Ivet

After the package is installed you can use it like

Ivet list --input "C:\MigrationFiles"

How to tag code?

Add Ivet.Model (https://www.nuget.org/packages/Ivet.Model) to your project. You are now ready to tag your code. All names and possibilities are listed in Janusgraph documentation at https://docs.janusgraph.org/schema/.

Tag a Vertex:

[Vertex]
public class MyVertex
{
    [PropertyKey]
    [PrimaryKey()]
    public string Id { get; set; }

    [PropertyKey(Name="NewName", Cardinality=Cardinality.SINGLE)]
    public string ANamedProperty { get; set; }

    [EdgeProperty]
    public List<Vertex3> AListProperty { get; private set; } = new List<Vertex3>();

    [EdgeProperty]
    public Vertex3[] AnArrayProperty { get; private set; } = Array.Empty<Vertex3>(); 
}

You can also specify a different name or a cardinality (details at https://docs.janusgraph.org/schema/#property-key-cardinality):

[PropertyKey(Name="NewName", Cardinality=Cardinality.SINGLE)]
public string ANamedProperty { get; set; }

Tag an Edge:

[Edge(typeof(MyVertex1), typeof(MyVertex2))]
public class EdgeWithProperties
{
    [PropertyKey]
    public int AProperty { get; set; }
}

You can also tag a property to be used with an index (https://docs.janusgraph.org/schema/index-management/index-performance/):

[Vertex]
public class MyVertex
{
    [PropertyKey]
    [CompositeIndex("unicity_index", IsUnique = true)] // Set unicity of the data
    public string ACompositeIndexProperty { get; set; }

    [PropertyKey]
    [MixedIndex("vertex2_mixed", Backend = "search", Mapping = MappingType.TEXTSTRING)]
    public string SearchProperty { get; set; }
}

What's next?

You can now run a generate command in order to create migration files.

[!NOTE] Many files are created by the generate command. One contains vertices and edges and properties. Indices are in different files to avoid timeout at migration time.

You can can have some details of migrations with list.

[!TIP] You can open and manually edit your migration files. In particular there is a description field whose content can be seen with list command

> Ivet list --input ".\Migrations"

-------------------------------------------------------------------------------------------------------
 | Name                            | Description                                 | Date                |
 -------------------------------------------------------------------------------------------------------
 | Migration_202403032330_000      | Vertex and edge creation for my new feature | 10/03/2024 14:21:54 |
 -------------------------------------------------------------------------------------------------------
 | Migration_202403032330_001      |                                             | 10/03/2024 14:22:04 |
 -------------------------------------------------------------------------------------------------------
 | Migration_202403032330_002      |                                             | 10/03/2024 14:22:14 |
 -------------------------------------------------------------------------------------------------------
 | Migration_202403032330_003      |                                             | 10/03/2024 14:22:24 |
 -------------------------------------------------------------------------------------------------------
 | Migration_202403032330_004      |                                             | 10/03/2024 14:22:34 |
 -------------------------------------------------------------------------------------------------------

 Count:5
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.3.0 116 4/24/2024
1.2.0 138 3/10/2024
1.1.1 134 3/4/2024
1.1.0 120 3/3/2024