diff --git a/src/app/database/data.db b/src/app/database/data.db index 0601b68..9eabb42 100644 Binary files a/src/app/database/data.db and b/src/app/database/data.db differ diff --git a/src/app/lib/db.zig b/src/app/lib/db.zig index d1f5699..bb75239 100644 --- a/src/app/lib/db.zig +++ b/src/app/lib/db.zig @@ -1,54 +1,17 @@ -const std = @import("std"); -const sql = @import("sqlite"); - -pub fn loadDb(path: []u8) !sql.sqlite.Db{ - try sql.sqlite.Db.init(.{ - .mode = sql.sqlite.Db.Mode{ .File = path}, - .open_flags = .{ - .write = true, - .create = true, - }, - .threading_mode = .MultiThread, - }); -} - -const addArtist = \\INSERT INTO artists ('artist', 'plays', 'url') VALUES (?,?) +pub const addArtist = \\INSERT INTO artists ('artist', 'plays', 'url') VALUES (?,?) ; -const addTrack = \\INSERT INTO tracks ('artist', 'track', 'album', 'plays', 'url') VALUES (?,?,?,?) +pub const addTrack = \\INSERT INTO tracks ('artist', 'track', 'album', 'plays', 'url') VALUES (?,?,?,?) ; -const getArtist = \\SELECT artist, plays FROM artists WHERE artist == ? +pub const getArtist = \\SELECT artist, plays FROM artists WHERE artist == ? ; -const getTrack = \\SELECT artist, track, album, plays FROM tracks WHERE track == ? +pub const getTrack = \\SELECT artist, track, album, plays FROM tracks WHERE track == ? ; -const getTrackSearch = \\SELECT url FROM artists WHERE artist == ? +pub const getTrackSearch = \\SELECT url FROM artists WHERE artist == ? ; -const getArtistSearch = \\SELECT artist, plays FROM artists WHERE artist == ? -; - -pub var db = loadDb("/home/swebb/Source/zuletzt/src/app/database/data.db"); - -pub fn search(query: []const u8) !void{ - var artistSearch = try db.prepare(getArtistSearch); - defer artistSearch.deinit(); - var trackSearch = try db.prepare(getTrackSearch); - defer trackSearch.deinit(); - - const artistResults = try artistSearch.one( - struct { - artist: [128:0]u8, - plays: usize, - }, - .{}, - .{ .artist = query}, - ); - - if (artistResults) |r|{ - std.log.debug("Artist: {}, Plays: {}", .{r.name, r.plays}); - } - -} \ No newline at end of file +pub const getArtistSearch = \\SELECT artist, plays FROM artists WHERE artist LIKE '%' || ? || '%' +; \ No newline at end of file diff --git a/src/app/views/search.zig b/src/app/views/search.zig index 17c0255..47bfda8 100644 --- a/src/app/views/search.zig +++ b/src/app/views/search.zig @@ -1,12 +1,46 @@ const std = @import("std"); const jetzig = @import("jetzig"); -const search = @import("../../db.zig"); +const queries = @import("../lib/db.zig"); +const sqlite = @import("sqlite"); pub fn index(request: *jetzig.Request, data: *jetzig.Data) !jetzig.View { - var root = try data.object(); + _ = data; + const allocator = std.heap.page_allocator; + var db = try sqlite.Db.init(.{ + .mode = sqlite.Db.Mode{ .File = "/home/swebb/Source/zuletzt/src/app/database/data.db" }, + .open_flags = .{ + .write = true, + .create = true, + }, + .threading_mode = .MultiThread, + }); + //var root = try data.object(); const params = try request.params(); - const query = params.get("q"); - try root.put("q",query); + const query: ?[]const u8 = if (params.get("q")) |param| param.string.value else null; + if (query != null){ + // sql.search(query, db); + var artistSearch = try db.prepare(queries.getArtistSearch); + defer artistSearch.deinit(); + + const artistResults = try artistSearch.all( + struct{ + artist: []u8, + plays: usize, + }, + allocator, + .{}, + .{ .artist = query}, + ); + + for (artistResults) |r|{ + std.log.debug("artist: {s}, Plays: {}", .{r.artist, r.plays}); + //std.log.debug("{s}", .{r}); + } + } else{ + return request.render(.bad_request); + } + //const query = params.get("q"); + //try root.put("q",query); //try root.put("q", data.string("Welcome")); return request.render(.ok); }