Skip to content

Commit 56e758e

Browse files
authored
Merge branch 'main' into UmarqulovMuhammd
2 parents 195b8c5 + 9db9140 commit 56e758e

File tree

17 files changed

+100
-36
lines changed

17 files changed

+100
-36
lines changed

Tigernet.Samples.RestApi/Clevers/Interfaces/IUserClever.cs

+1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ public interface IUserClever : ICleverBase<User, int>
77
{
88
User Add(User user);
99
User Update(int userId, User user);
10+
bool Delete(int userId);
1011
}

Tigernet.Samples.RestApi/Clevers/UserClever.cs

+16-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class UserClever : CleverBase<User, int>, IUserClever
4343
Id = 6,
4444
Name = "Sabohat",
4545
Age = 23
46-
},
46+
}
4747
};
4848

4949
public UserClever() : base(users.AsQueryable())
@@ -56,6 +56,7 @@ public User Add(User user)
5656

5757
return user;
5858
}
59+
5960

6061
public User Update(int userId, User user)
6162
{
@@ -68,5 +69,19 @@ public User Update(int userId, User user)
6869

6970
return existedUser;
7071
}
72+
73+
public bool Delete(int userId)
74+
{
75+
var userToDelete = users.FirstOrDefault(u => u.Id == userId);
76+
if (userToDelete != null)
77+
{
78+
users.Remove(userToDelete);
79+
return true;
80+
}
81+
else
82+
{
83+
return false;
84+
}
85+
}
7186
}
7287
}

Tigernet.Samples.RestApi/Models/User.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ namespace Tigernet.Samples.RestApi.Models
66
public class User : IEntity<int>, IQueryableEntity
77
{
88
public int Id { get; set; }
9-
9+
1010
[SearchableProperty]
1111
public string Name { get; set; }
12-
12+
1313
public int Age { get; set; }
1414
}
1515
}

Tigernet.Samples.RestApi/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using Tigernet.Samples.RestApi.Clevers;
33
using Tigernet.Samples.RestApi.Clevers.Interfaces;
44

5-
var builder = new TigernetHostBuilder("http://localhost:5000/");
5+
var builder = new TigernetHostBuilder();
66

77
builder.AddService<IUserClever, UserClever>();
88

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"applicationUrl": "http://localhost:5000/"
3+
}

Tigernet.Samples.RestApi/Resters/UsersRester.cs

+9-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public async ValueTask<object> GetByFilter(EntityQueryOptions<User> model)
2828
public async ValueTask<object> Get([FromBody] int id)
2929
{
3030
var result = await userClever.GetByIdAsync(id);
31+
3132
return Ok(result);
3233
}
3334

@@ -46,8 +47,15 @@ public object Put()
4647
Name = "Ali",
4748
Age = 28
4849
};
49-
50+
5051
return Ok(userClever.Update(user.Id, user));
5152
}
53+
54+
[Deleter("/delete")]
55+
public object Delete(int userUd)
56+
{
57+
var res = userClever.Delete(7);
58+
return Ok(res);
59+
}
5260
}
5361
}

docs/GeneratingQueryOptions.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generating query options can be made easy by utilizing extension methods that provide a range of features for querying. These methods include: `1.2`
1+
# Generating query options can be made easily by utilizing extension methods that provide a range of features for querying. These methods include: `1.2`
22

33
- CreateQuery: creates a new query object for the specified entity type.
44
- AddFilter: filters data based on specific criteria, such as location or ID.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+

2+
3+
namespace Tigernet.Hosting.Attributes.HttpMethods
4+
{
5+
/// <summary>
6+
/// The 'DeleterAttribute' class used to represent a DELETE HTTP method.
7+
/// </summary>
8+
public class DeleterAttribute : HttpMethodAttribute
9+
{
10+
/// <inheritdoc />
11+
public DeleterAttribute(string route = null)
12+
: base(route)
13+
{
14+
15+
}
16+
17+
/// <inheritdoc />
18+
internal override string HttpMethodName
19+
{
20+
get => "DELETE";
21+
}
22+
}
23+
}

src/Tigernet.Hosting/Attributes/HttpMethods/PosterAttribute.cs

+6-5
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
public class PosterAttribute : HttpMethodAttribute
77
{
88
/// <inheritdoc />
9-
public PosterAttribute(string route = null)
9+
public PosterAttribute(string route = null)
1010
: base(route)
1111
{
12-
1312
}
1413

1514
/// <inheritdoc/>
16-
internal override string HttpMethodName { get => "POST"; }
17-
18-
}
15+
internal override string HttpMethodName
16+
{
17+
get => "POST";
18+
}
19+
}

src/Tigernet.Hosting/Exceptions/ArgumentNullException.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ public ArgumentNullException(string argumentName)
66
: base($"The argument '{argumentName}' cannot be null, please provide a valid input!")
77
{
88
}
9-
9+
1010
}

src/Tigernet.Hosting/Extensions/QueryExtensions.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using System.Linq.Expressions;
2-
using Microsoft.EntityFrameworkCore;
1+
using Microsoft.EntityFrameworkCore;
2+
using System.Linq.Expressions;
33
using Tigernet.Hosting.Models.Common;
44
using Tigernet.Hosting.Models.Query;
55

src/Tigernet.Hosting/Models/Common/IQueryableEntity.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Tigernet.Hosting.Models.Query;
2-
3-
namespace Tigernet.Hosting.Models.Common
1+
namespace Tigernet.Hosting.Models.Common
42
{
53
/// <summary>
64
/// Defines queryable entity

src/Tigernet.Hosting/Models/Query/FilterOptions.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Tigernet.Hosting.Models.Query;
2-
3-
namespace Tigernet.Hosting.Models.Query;
1+
namespace Tigernet.Hosting.Models.Query;
42

53
/// <summary>
64
/// Represents filtering options

src/Tigernet.Hosting/Models/Query/IQueryOptions.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Tigernet.Hosting.Models.Query;
2-
3-
namespace Tigernet.Hosting.Models.Query;
1+
namespace Tigernet.Hosting.Models.Query;
42

53
/// <summary>
64
/// Defines properties for queryable source query options

src/Tigernet.Hosting/Models/Query/QueryOptions.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Tigernet.Hosting.Models.Query;
2-
3-
namespace Tigernet.Hosting.Models.Query;
1+
namespace Tigernet.Hosting.Models.Query;
42

53
/// <summary>
64
/// Represents queryable source query options

src/Tigernet.Hosting/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Text;
22
using Tigernet.Hosting;
33

4-
TigernetHostBuilder host = new TigernetHostBuilder("http://localhost:5001/");
4+
TigernetHostBuilder host = new TigernetHostBuilder();
55

66
// add route to the host
77
host.MapRoute("/", async context =>

src/Tigernet.Hosting/TigernetHostBuilder.cs

+30-9
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1+
using Newtonsoft.Json;
12
using System.Data;
23
using System.Net;
34
using System.Reflection;
45
using System.Text;
5-
using System.Text.Json.Serialization;
6-
using Newtonsoft.Json;
6+
using System.Text.Json;
77
using Tigernet.Hosting.Attributes.HttpMethods;
88
using Tigernet.Hosting.Attributes.RequestContents;
99
using Tigernet.Hosting.Attributes.Resters;
1010
using Tigernet.Hosting.Exceptions;
11-
using Tigernet.Hosting.Extensions;
1211
using JsonConverter = System.Text.Json.Serialization.JsonConverter;
1312
using JsonSerializer = System.Text.Json.JsonSerializer;
1413

15-
namespace Tigernet.Hosting;
14+
namespace Tigernet.Hosting;
1615

1716
#pragma warning disable
1817
/// <summary>
@@ -49,10 +48,10 @@ public partial class TigernetHostBuilder
4948
/// Constructor for TigernetHostBuilder class. It takes in a string prefix and sets it as the prefix for the HttpListener.
5049
/// </summary>
5150
/// <param name="prefix">The prefix for the HttpListener</param>
52-
public TigernetHostBuilder(string prefix)
51+
public TigernetHostBuilder()
5352
{
54-
_prefix = prefix;
55-
_listener.Prefixes.Add(prefix);
53+
_prefix = GetPrefix();
54+
_listener.Prefixes.Add(_prefix);
5655
_services = new Dictionary<Type, Type>();
5756
}
5857

@@ -168,10 +167,11 @@ public void MapResters()
168167
var posterAttr = method.GetCustomAttribute<PosterAttribute>();
169168
var patcherAttr = method.GetCustomAttribute<PatcherAttribute>();
170169
var putterAttr = method.GetCustomAttribute<PutterAttribute>();
170+
var deleterAttr = method.GetCustomAttribute<DeleterAttribute>();
171171

172172
HttpMethodAttribute? endpointAttr = GetValidatedMethodAttributes(new HttpMethodAttribute[]
173173
{
174-
getterAttr, posterAttr, patcherAttr, putterAttr
174+
getterAttr, posterAttr, patcherAttr, putterAttr, deleterAttr
175175
});
176176

177177
var route = Path.Combine("/", typeName.Split(new[] { "Rester" },
@@ -185,7 +185,7 @@ public void MapResters()
185185
}
186186
}
187187
}
188-
188+
189189
/// <summary>
190190
/// Retrieves a validated HttpMethodAttribute from an array of HttpMethodAttributes.
191191
/// </summary>
@@ -330,4 +330,25 @@ private async ValueTask<object[]> GetArguments(MethodInfo method, HttpListenerCo
330330

331331
return result;
332332
}
333+
334+
private string GetPrefix()
335+
{
336+
// get the assembly that is using this library
337+
var assembly = Assembly.GetCallingAssembly();
338+
339+
// Set the path of the file within the project
340+
string filePath = @"../../../Properties/launchSettings.json";
341+
342+
// Read the contents of the file
343+
string launchSettingsJson = File.ReadAllText(filePath);
344+
345+
// Parse the JSON string into a JsonDocument object
346+
JsonDocument launchSettingsDoc = JsonDocument.Parse(launchSettingsJson);
347+
348+
// Navigate the JSON object to get the desired value
349+
JsonElement applicationUrlElement = launchSettingsDoc.RootElement
350+
.GetProperty("applicationUrl");
351+
352+
return applicationUrlElement.GetString();
353+
}
333354
}

0 commit comments

Comments
 (0)