Skip to content
/ very Public

[Experimental] Express inspired web framework written in V

Notifications You must be signed in to change notification settings

xiusin/very

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
xiusin
Jun 29, 2024
a686638 · Jun 29, 2024
Dec 24, 2023
Jun 28, 2024
Jun 29, 2024
Jun 25, 2024
Jun 29, 2024
Jun 25, 2024
Feb 15, 2024
Dec 12, 2023
Jun 25, 2024
Jun 28, 2024
Sep 8, 2023
May 6, 2024
Jun 27, 2024
Sep 8, 2023
May 6, 2024
Jun 25, 2024
Feb 4, 2024
Jun 27, 2024
Jun 27, 2024
Dec 12, 2023
Oct 16, 2023
Sep 8, 2023
Sep 8, 2023

Repository files navigation

very

Express inspired web framework written in V with net.http.server module.

[Experimental]

example:

module main

import xiusin.very
import db.sqlite

[table: 'users']
pub struct User {
pub mut:
	id         int    [primary; sql: serial]
	username   string [required; sql_type: 'TEXT']
	password   string [required; sql_type: 'TEXT']
	created_at string [default: 'CURRENT_TIMESTAMP']
	updated_at string [default: 'CURRENT_TIMESTAMP']
	active     bool
}

[table: 'articles']
pub struct Article {
pub mut:
	id      int    [primary; sql: serial]
	title   string
	content string
	time    string
	tags    string
	star    bool
}

pub struct ApiResponse[T] {
	code int
	msg  string
	data T
}

[group: '/demo']
struct DemoController {
    very.Context
pub mut:
	userid int
	db     &sqlite.DB  [inject: 'db'] = unsafe { nil }
}

['/success'; get]
pub fn (mut c DemoController) success() ! {
	if c.userid > 0 {
		c.ctx.text('success: exists')
	} else {
		c.userid = 1
		c.ctx.text('success set user_id = ${c.userid}')
	}
}

['/success1'; get]
pub fn (mut c DemoController) success1() ! {
	if c.userid > 0 {
		c.ctx.text('success1: exists')
	} else {
		c.userid = 2
		c.ctx.text('success1 set user_id = ${c.userid}')
	}
}

fn main() {
	mut app := very.new(very.default_configuration())
	mut db := sqlite.connect('database.db') or { panic(err) }
	db.synchronization_mode(sqlite.SyncMode.off)!
	db.journal_mode(sqlite.JournalMode.memory)!

    app.di.inject_on(&db)

	sql db {
		create table Article
	}

	mut api := app.group('/api')

	mut counter := 0

	api.get('/hello', fn [mut counter] (mut ctx very.Context) ! {
		ctx.text('hello world: ${counter}')
	})

	api.get('/article/list', fn (mut ctx very.Context) ! {
		mut db := ctx.di.get[sqlite.DB]('db')!
		result := sql db {
			select from Article
		}!
		ctx.json(ApiResponse[[]Article]{
			code: 0
			data: []Article{}
		})
	})

	api.post('/article/save', fn (mut ctx very.Context) ! {
		ctx.text(ctx.host())
	})

	app.mount[DemoController]()
	app.statics('/', 'statics', 'index.html')

    // mut asset := very.Asset{}
    // app.embed_statics('/dist', asset) // see examples/bind_bin_data.vsh

	app.run()
}

About

[Experimental] Express inspired web framework written in V

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published