ソースを参照

Sharing contrancts with projects.

tags/v1.1.0^2
nemanja.grkovic 3年前
コミット
e85e7d7a87

+ 2
- 2
IdentityProvider/Services/AuthService.cs ファイルの表示

using IdentityProvider.Protos.AuthService;
//using IdentityProvider.Protos.AuthService;
namespace IdentityProvider.Services namespace IdentityProvider.Services
{ {
public class AuthService : AuthorizationService.AuthorizationServiceBase
public class AuthService
{ {
private readonly ILogger<AuthService> _logger; private readonly ILogger<AuthService> _logger;
public AuthService(ILogger<AuthService> logger) public AuthService(ILogger<AuthService> logger)

+ 15
- 0
NemAnCore/NemAnBlazor.csproj ファイルの表示

</PropertyGroup> </PropertyGroup>


<ItemGroup> <ItemGroup>
<None Remove="Protos\search.proto" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.21.4" />
<PackageReference Include="Grpc.Net.Client" Version="2.47.0" />
<PackageReference Include="Grpc.Net.Client.Web" Version="2.47.0" />
<PackageReference Include="Grpc.Tools" Version="2.47.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.7" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.7" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.7" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.7" PrivateAssets="all" />
</ItemGroup> </ItemGroup>


<ItemGroup>
<Protobuf Include="Protos\search.proto" GrpcServices="Client" />
</ItemGroup>

</Project> </Project>

+ 16
- 0
NemAnCore/Pages/Index.razor ファイルの表示

@page "/" @page "/"
@using Grpc.Net.Client
@using Grpc.Net.Client.Web
@using SpotifyService.Protos
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager


<PageTitle>Index</PageTitle> <PageTitle>Index</PageTitle>
NavigationManager.NavigateTo( NavigationManager.NavigateTo(
"https://accounts.spotify.com/en/authorize?client_id=83e1d09876b049c4bb1953185a4b3bfb&redirect_uri=https%3A%2F%2Flocalhost%3A7229%2F&response_type=code&scope=user-read-currently-playing%20user-read-email%20user-library-modify%20user-top-read%0A%0A%0A&show_dialog=true"); "https://accounts.spotify.com/en/authorize?client_id=83e1d09876b049c4bb1953185a4b3bfb&redirect_uri=https%3A%2F%2Flocalhost%3A7229%2F&response_type=code&scope=user-read-currently-playing%20user-read-email%20user-library-modify%20user-top-read%0A%0A%0A&show_dialog=true");
} }

private async Task Grpc()
{
var channel = GrpcChannel.ForAddress("https://localhost:7251", new GrpcChannelOptions
{
HttpHandler = new GrpcWebHandler(new HttpClientHandler())
});

var client = new Search.SearchClient(channel);
var response = await client.SearchForItemAsync(new SearchForItemRequest { Query = "venom", Type = "track", Limit = 5, Offset = 0, IncludeExternal = "audio"});

}
} }

+ 2
- 0
NemAnCore/Program.cs ファイルの表示


using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using NemAnBlazor; using NemAnBlazor;


builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });



await builder.Build().RunAsync(); await builder.Build().RunAsync();



+ 3
- 0
NemAnCore/Protos/genres.proto ファイルの表示

syntax = "proto3";

option csharp_namespace = "SpotifyService.Protos";

+ 74
- 0
NemAnCore/Protos/search.proto ファイルの表示

syntax = "proto3";

option csharp_namespace = "SpotifyService.Protos";

package search;

service Search{
rpc SearchForItem(SearchForItemRequest) returns (SearchForItemResponse);
}

message SearchForItemRequest{
string query = 1;
string type = 2;
string include_external = 3;
int32 limit = 4;
int32 offset = 5;

}

message SearchForItemResponse{
message Tracks {
string href = 1;
repeated Items items = 2;
}

Tracks tracks = 1;
message Items{
Album album = 1;
repeated Artists artists = 2;
int32 duration_ms = 3;
External_urls1 external_urls = 4;
string href = 5;
string id = 6;
string name = 7;
int32 popularity = 8;
int32 track_number = 9;
string type = 10;
string uri = 11;
}

}
message Images {
uint32 height = 1;
string url = 2;
uint32 width = 3;
}

message Album {
string href = 1;
string id = 2;
repeated Images images = 3;
string name = 4;
string release_date = 5;
uint32 total_tracks = 6;
string type = 7;
string uri = 8;
}

message External_urls {
string spotify = 1;
}

message Artists {
External_urls external_urls = 1;
string href = 2;
string id = 3;
string name = 4;
string type = 5;
string uri = 6;
}

message External_urls1 {
string spotify = 1;
}

+ 127
- 0
gRPCServer/Contracts/SeacrhContracts.cs ファイルの表示

 using System;
using System.Collections.Generic;

using System.Globalization;
using System.Text.Json.Serialization;

namespace SpotifyService.Contracts
{

public partial class SearchContracts
{
[JsonPropertyName("tracks")]
public Tracks? Tracks { get; set; }
}

public partial class Tracks
{
[JsonPropertyName("href")]
public Uri Href { get; set; }

[JsonPropertyName("items")]
public Item[]? Items { get; set; }
}

public partial class Item
{
[JsonPropertyName("album")]
public Album Album { get; set; }

[JsonPropertyName("artists")]
public Artist[] Artists { get; set; }

[JsonPropertyName("duration_ms")]
public long DurationMs { get; set; }

[JsonPropertyName("external_urls")]
public ExternalUrls ExternalUrls { get; set; }

[JsonPropertyName("href")]
public Uri Href { get; set; }

[JsonPropertyName("id")]
public string Id { get; set; }

[JsonPropertyName("name")]
public string Name { get; set; }

[JsonPropertyName("popularity")]
public long Popularity { get; set; }

[JsonPropertyName("track_number")]
public long TrackNumber { get; set; }

[JsonPropertyName("type")]
public string Type { get; set; }

[JsonPropertyName("uri")]
public string Uri { get; set; }
}

public partial class Album
{
[JsonPropertyName("href")]
public Uri Href { get; set; }

[JsonPropertyName("id")]
public string Id { get; set; }

[JsonPropertyName("images")]
public Image[] Images { get; set; }

[JsonPropertyName("name")]
public string Name { get; set; }

[JsonPropertyName("release_date")]
public DateTimeOffset ReleaseDate { get; set; }

[JsonPropertyName("total_tracks")]
public long TotalTracks { get; set; }

[JsonPropertyName("type")]
public string Type { get; set; }

[JsonPropertyName("uri")]
public string Uri { get; set; }
}

public partial class Image
{
[JsonPropertyName("height")]
public long Height { get; set; }

[JsonPropertyName("url")]
public Uri Url { get; set; }

[JsonPropertyName("width")]
public long Width { get; set; }
}

public partial class Artist
{
[JsonPropertyName("external_urls")]
public ExternalUrls ExternalUrls { get; set; }

[JsonPropertyName("href")]
public Uri Href { get; set; }

[JsonPropertyName("id")]
public string Id { get; set; }

[JsonPropertyName("name")]
public string Name { get; set; }

[JsonPropertyName("type")]
public string Type { get; set; }

[JsonPropertyName("uri")]
public string Uri { get; set; }
}

public partial class ExternalUrls
{
[JsonPropertyName("spotify")]
public Uri Spotify { get; set; }
}

}

+ 23
- 3
gRPCServer/Program.cs ファイルの表示

using gRPCServer.Services;
using Grpc.Net.Client;
using SpotifyService.Services;


var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);


// Add services to the container. // Add services to the container.
builder.Services.AddGrpc(); builder.Services.AddGrpc();


builder.Services.AddHttpClient();

builder.Services.AddCors(o => o.AddPolicy("AllowAll", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding");
}));

var app = builder.Build(); var app = builder.Build();


app.UseRouting();

app.UseCors();

// Configure the HTTP request pipeline. // Configure the HTTP request pipeline.
app.MapGrpcService<GreeterService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
app.MapGrpcService<SearchService>();
app.UseGrpcWeb();

app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<SearchService>().EnableGrpcWeb().RequireCors("AllowAll");
});


app.Run(); app.Run();

+ 3
- 0
gRPCServer/Protos/genres.proto ファイルの表示

syntax = "proto3";

option csharp_namespace = "SpotifyService.Protos";

+ 0
- 21
gRPCServer/Protos/greet.proto ファイルの表示

syntax = "proto3";

option csharp_namespace = "gRPCServer";

package greet;

// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
string name = 1;
}

// The response message containing the greetings.
message HelloReply {
string message = 1;
}

+ 74
- 0
gRPCServer/Protos/search.proto ファイルの表示

syntax = "proto3";

option csharp_namespace = "SpotifyService.Protos";

package search;

service Search{
rpc SearchForItem(SearchForItemRequest) returns (SearchForItemResponse);
}

message SearchForItemRequest{
string query = 1;
string type = 2;
string include_external = 3;
int32 limit = 4;
int32 offset = 5;

}

message SearchForItemResponse{
message Tracks {
string href = 1;
repeated Items items = 2;
}

Tracks tracks = 1;
message Items{
Album album = 1;
repeated Artists artists = 2;
int32 duration_ms = 3;
External_urls1 external_urls = 4;
string href = 5;
string id = 6;
string name = 7;
int32 popularity = 8;
int32 track_number = 9;
string type = 10;
string uri = 11;
}

}
message Images {
uint32 height = 1;
string url = 2;
uint32 width = 3;
}

message Album {
string href = 1;
string id = 2;
repeated Images images = 3;
string name = 4;
string release_date = 5;
uint32 total_tracks = 6;
string type = 7;
string uri = 8;
}

message External_urls {
string spotify = 1;
}

message Artists {
External_urls external_urls = 1;
string href = 2;
string id = 3;
string name = 4;
string type = 5;
string uri = 6;
}

message External_urls1 {
string spotify = 1;
}

+ 0
- 22
gRPCServer/Services/GreeterService.cs ファイルの表示

using Grpc.Core;
using gRPCServer;

namespace gRPCServer.Services
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}

public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}

+ 34
- 0
gRPCServer/Services/SearchService.cs ファイルの表示

using SpotifyService.Protos;
using Grpc.Core;
using System.Text.Json;
using SpotifyService.Contracts;

namespace SpotifyService.Services
{
public class SearchService : Search.SearchBase
{
private readonly IHttpClientFactory _httpClientFactory;

public SearchService(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}

public override async Task<SearchForItemResponse> SearchForItem(SearchForItemRequest request, ServerCallContext context)
{

var httpClient = _httpClientFactory.CreateClient();
var responseText = await httpClient.GetStringAsync($"https://api.spotify.com/v1/search?q={request.Query}&type={request.Type}");

var tracks = JsonSerializer.Deserialize<SearchContracts>(responseText);

return new SearchForItemResponse
{
Tracks = tracks!.Tracks.Items
};
//return null;

}
}
}


+ 11
- 4
gRPCServer/SpotifyService.csproj ファイルの表示

</PropertyGroup> </PropertyGroup>


<ItemGroup> <ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.21.4" />
<PackageReference Include="Grpc.AspNetCore" Version="2.40.0" /> <PackageReference Include="Grpc.AspNetCore" Version="2.40.0" />
<PackageReference Include="Grpc.AspNetCore.Web" Version="2.47.0" />
<PackageReference Include="Grpc.Net.Client" Version="2.47.0" />
<PackageReference Include="Grpc.Tools" Version="2.47.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup> </ItemGroup>


<ItemGroup>
<Protobuf Include="Protos\search.proto" GrpcServices="Server"></Protobuf>
</ItemGroup>

</Project> </Project>

+ 1
- 1
gRPCServer/appsettings.json ファイルの表示

"AllowedHosts": "*", "AllowedHosts": "*",
"Kestrel": { "Kestrel": {
"EndpointDefaults": { "EndpointDefaults": {
"Protocols": "Http2"
"Protocols": "Http1AndHttp2"
} }
} }
} }

読み込み中…
キャンセル
保存